Pandas如何将DataFrame中取值完全相同的列合并为单列
解法代码
你可以通过转置后按列值分组的方式高效实现需求,核心逻辑仅需一行代码:
import pandas as pd # 原始DataFrame df = pd.DataFrame({'a': [1,1,1,1, 0,0,0], 'b': [1,1,1,1, 0,0,0], 'c': [1,1,1,1, 0,0,0], 'd': [0,0,0,0, 1,1,1], 'e': [0,0,0,0, 1,1,1], 'f': [0,0,0,0, 1,1,1]}) # 合并取值完全一致的列 final_df = df.T.groupby(df.values.tolist(), sort=False).agg('/'.join).T
输出结果
执行后打印final_df即可得到预期结构:
a/b/c d/e/f 0 1 0 1 1 0 2 1 0 3 1 0 4 0 1 5 0 1 6 0 1
逻辑说明
- 先通过
df.T将原始DataFrame转置,原来的列转为行,原列名转为行索引 - 以每一列的完整取值列表作为分组键,所有取值完全一致的列会被分到同一组
- 对同一组的原列名用
/拼接作为新列名 - 最后转置回原始结构即得到目标结果
- 加
sort=False参数可以保证拼接列名时的顺序和原列出现顺序一致,不会被自动排序打乱
内容的提问来源于stack exchange,提问作者user14946571
相关产品推荐
相关产品推荐

