首页 > 解决方案 > 使用 Pandas 在 Python 中打印数据帧的列标题

问题描述

我有一个如下所示的输入数据框:

print (df)
    Id  A  B  C  D
0  101  0  0  0  1
1  102  0  0  0  0
2  103  1  0  1  0
3  104  1  0  1  1

输出:我想打印其中包含“1”的列的列名。输出数据框应如下所示。如果 1 不存在,它应该返回一个空字符串。

Id 101- D (4th index) has 1
Id 102- None
Id 104- A, C and D which are 1,3,4 indexes

因此,示例输出如下所示:

print (df)
    Id  Result
0  101       D
1  102        
2  103     A,C
3  104   A,C,D

我已经尝试过这段代码,但它没有用:


df['out'] = df.apply(
    lambda x: ','.join(str(ele) for ele in [df.column for df.column,df.column.values in enumerate(x[:]) if df.column.values is 1]), 
    axis=1)

df_out

标签: pythonpandasdataframe

解决方案


与所有没有第一个的列一起用于DataFrame.dot矩阵乘法,添加分隔符,最后通过索引删除最后一个字符(分隔符):

df['Result'] = df.iloc[:, 1:].dot(df.columns[1:] + ',').str[:-1]
print (df)
    Id  A  B  C  D Result
0  101  0  0  0  1      D
1  102  0  0  0  0       
2  103  1  0  1  0    A,C
3  104  1  0  1  1  A,C,D

您的解决方案应使用提取匹配索引进行更改join

df['Result'] = df.apply(lambda x: ','.join(x.index[1:][x.iloc[1:] == 1]), axis=1)
print (df)
    Id  A  B  C  D Result
0  101  0  0  0  1      D
1  102  0  0  0  0       
2  103  1  0  1  0    A,C
3  104  1  0  1  1  A,C,D

推荐阅读