python - 以其他列的名称作为值的 Pandas DataFrame 聚合列
问题描述
我正在尝试在 myDataFrame
中创建一个新列,该列是聚合列名的列表。这是一个示例DataFrame
:
In [1]: df = pd.DataFrame({'A':[1,2,3],
'B':[4,5,6],
'C':[7,8,9],
'D':[1,3,5],
'E':[5,3,6],
'F':[7,4,3]})
In [2]: df
Out[2]:
A B C D E F
0 1 4 7 1 5 7
1 2 5 8 3 3 4
2 3 6 9 5 6 3
我想创建一个新列,其中包含满足特定条件的列名列表。假设我对 value > 3 的列感兴趣——我想要一个如下所示的输出:
In [3]: df
Out[3]:
A B C D E F Flag
0 1 4 7 1 5 7 ['B', 'C', 'E', 'F']
1 2 5 8 3 3 4 ['B', 'C', 'F']
2 3 6 9 5 6 3 ['B', 'C', 'D', 'E']
目前,我正在使用apply
:
df['Flag'] = df.apply(lambda row: [list(df)[i] for i, j in enumerate(row) if j > 3], axis = 1)
这可以完成工作,但感觉很笨重,我想知道是否有更优雅的解决方案。
谢谢!
解决方案
在这里使用df.dot()
:
df['Flag']=(df>3).dot(df.columns).apply(list)
print(df)
A B C D E F Flag
0 1 4 7 1 5 7 [B, C, E, F]
1 2 5 8 3 3 4 [B, C, F]
2 3 6 9 5 6 3 [B, C, D, E]
推荐阅读
- python - 将预编译的扩展放在非纯 Python Wheel 包的根文件夹中
- c - 使用 ptrace 的远程 mmap 系统调用(Linux,C)
- python - PyQt5 使用布局向小部件子类添加额外的小部件?
- r - 在ggplot2中居中对齐刻度标签
- c - CS50 Filter(less) 模糊功能
- r - 用于变量选择和预测的惩罚多项离散时间竞争风险模型
- php - android中带有后端的Firebase身份验证
- dns - OpenShift 4 域更改
- python - 如何设置和使用 python 审计钩子
- php - 依赖安装失败!将laravel api rest部署到heroku时出错