python - Python Pandas:根据单元格中的值重复列名
问题描述
我有以下数据框
import pandas as pd
dfx = pd.DataFrame({'A': [100, 100, 100, 102, 102],
'B': [1, 2, 3, 0, 0],'C': [0, 2, 1, 0, 0],'D': [0, 0, 4, 1, 0]
})
print(dfx)
A B C D
0 100 1 0 0
1 100 2 2 0
2 100 3 1 4
3 102 0 0 1
4 102 0 0 0
从这个数据框中,我可以获取所有值 > 0 的列并将其放入列表中。这给出了唯一值的列表:
cols = dfx[['B', 'C', 'D']].columns
dfx['list_of_cols'] = dfx[['B', 'C', 'D']].apply(lambda x: x > 0, raw=True).apply(lambda x: list(cols[x.values]), axis=1)
print(dfx)
A B C D list_of_cols
0 100 1 0 0 [B]
1 100 2 2 0 [B, C]
2 100 3 1 4 [B, C, D]
3 102 0 0 1 [D]
4 102 0 0 0 []
但我希望列名重复与单元格中存在的值一样多的次数。我正在寻找的输出是这样的:
A B C D list_of_cols_1 list_of_cols_2
0 100 1 0 0 [1xB] [B]
1 100 2 2 0 [2xB, 2xC] [B, B, C, C]
2 100 3 1 4 [3xB, 1xC, 4xD] [B, B, B, C, D, D, D, D]
3 102 0 0 1 [1xD] [D]
4 102 0 0 0 [] []
我该怎么做呢?
解决方案
你可以试试dot
s=df.loc[:,'B':]
df['New Col']=s.dot(s.columns+',').str.split(',').str[:-1]
Out[70]:
0 [B]
1 [B, B, C, C]
2 [B, B, B, C, D, D, D, D]
3 [D]
4 []
dtype: object
推荐阅读
- sql - 从动态 sql 字符串变量中选择 INTO Temp 表
- javascript - 如何同时过滤和映射数组?
- r - 您可以按行和列排列 Flexdashboard 吗?
- excel - 我需要在 Excel 中计算项目的进度百分比
- ajax - 如何在ajax中获得字符串响应?
- webpack - 基于类函数构建模块构建失败
- light-4j - 有关 REST 调用兼容性的问题
- mysql - 将存储函数迁移到新的 MySQL 服务器时出错
- python - 需要帮助转换 ASN1(x509)
- docker - 运行 apache-ignite/bin/control.sh --baseline 时连接到集群失败