python - pandas dataframe - 获取单元格具有特定值的列名列表
问题描述
我目前正在尝试使用 pandas DataFrames。我已经构建了一个如下所示的矩阵:
x y z
A 1 0 1
B 1 1 0
C 1 0 0
D 0 1 0
我想要的是这个(对于每个单元格 = 1,将列名附加到每行的结果):
A x,z
B x,y
C x
D y
我目前最好的解决方案是遍历 for 循环中的列,获取值 > 0 的所有列,提取列名,然后将其传递给我的下一个函数。但是,由于我有很多列(> 1000),所以 for 循环非常慢,我确信有更好的方法我无法弄清楚。你能帮帮我吗?
解决方案
如果只有1
并且0
值使用矩阵乘法DataFrame.dot
与列名并最后删除分隔符,则使用Series.str.rstrip
:
df['new'] = df.dot(df.columns + ',').str.rstrip(',')
print (df)
x y z new
A 1 0 1 x,z
B 1 1 0 x,y
C 1 0 0 x
D 0 1 0 y
如果可能的话,还有一些其他整数,并且有必要0
通过DataFrame.gt
使用来测试更大的类似:
df['new'] = df.gt(0).dot(df.columns + ',').str.rstrip(',')
推荐阅读
- git - 列出 Git 存储库中特定用户更改的所有文件
- javascript - 如何使用 React 和 Babel 从 React-Select CDN 导入?
- python - 如何为包含其他 protobuf 的 protobuf 文件编写文本
- java - springboot使用@async执行任务有时会出现超时
- android - 使用 ID 从另一个 Activity 中的 SQLite 数据库读取数据
- c# - 如何从 ZKTeco 设备中的表“DEPARTMENTS”中获取 DeptName
- r - 当另一个变量包含某个字符串(R数据框)时填充一个变量
- javascript - 使用 Jquery 选择所有旁边
- authentication - Laravel 5.7 Auth::attempt 返回 false
- swift - 如何在swift中特定字符之后和之前获取特定字符串?