python - 使用 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
解决方案
与所有没有第一个的列一起用于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
推荐阅读
- spring-boot - Spring Boot - 在不同端口上启动 2 个 Tomcat 服务
- ios - iOS 静默推送通知不会唤醒某些设备上的应用程序
- pandas - 熊猫。如何在重新采样的df中重置索引
- postgresql - 在 postgres 中插入编码密码时出错
- python - 可以在 QtDesigner .ui 文件中找到属于提升的小部件类的子级吗?
- python - 有没有一种方法可以让我在 Pygame 中擦除文本?
- c++ - 与 STL 中的调用不匹配
- flutter - 如何在 Flutter 的 GridView 中增加索引?
- ios - UITableView 在一段时间后停止滚动
- r - 取相同 id 的两个数据框之间的最小日期差异