Python 基于行值条件从数据帧中提取列名

Python 基于行值条件从数据帧中提取列名,python,dataframe,Python,Dataframe,我有一个数据帧 A B C u1 0 .5 .2 u2 .2 0 .3 u3 .1 0 0 我需要根据每个索引查找值不为零的列名 所以我需要输出 elements u1 [B,C] u2 [A,C] u3 [A] 我可以使用df.idxmax(axis=1) 但是如何找到列的所有名称。您可以使用axis=1进行按行处理,并通过将值转换为bool-0为False,

我有一个数据帧

     A     B     C
 u1  0     .5    .2
 u2  .2     0     .3
 u3   .1    0     0
我需要根据每个索引查找值不为零的列名 所以我需要输出

        elements 
    u1  [B,C]
    u2  [A,C]
    u3  [A]
我可以使用
df.idxmax(axis=1)
但是如何找到列的所有名称。

您可以使用
axis=1
进行按行处理,并通过将值转换为
bool
-
0
False
,而不是
0
True

df = df.apply(lambda x: x.index[x.astype(bool)].tolist(), 1)
print (df)
u1    [B, C]
u2    [A, C]
u3       [A]
dtype: object
如果输出应为
string
s:

s = np.where(df, ['{}, '.format(x) for x in df.columns], '')
df = pd.Series([''.join(x).strip(', ') for x in s], index=df.index)
print (df)
u1    B, C
u2    A, C
u3       A
dtype: object
详情:

print (s)
[['' 'B, ' 'C, ']
 ['A, ' '' 'C, ']
 ['A, ' '' '']]

可能值得指定您拥有的数据帧类型<代码>火花,
熊猫
?解决方案不起作用?有问题吗?好的,什么是
打印(df.dtypes)
?所以你使用第一个或第二个解决方案?df.dtypes是float。需要第一个或第二个解决方案吗?我认为数据有问题,如果不保密,你能在我的个人资料中将真实数据发送到我的电子邮件吗?当然。。我发了一张快照