如何处理Pandas DataFrame中重复列名并合并对应列值?
解决Pandas合并重复列名为列表的问题
完整解决方案步骤
重置列名并清理原始数据
先把首行设置为DataFrame的列名,再移除原首行,同时重置索引解决原数据里的重复索引问题:# 将首行设为列名 df.columns = df.iloc[0] # 删除原列名所在的首行 df = df.drop(df.index[0]) # 重置索引(可选,处理原数据中的重复索引) df = df.reset_index(drop=True)按列名分组并合并为列表
使用groupby按列名对列分组,重复列名会被归为一组,对每组数据做处理:重复列的行值合并为列表,唯一列保留原始值:# 分组处理重复列 result_df = df.groupby(df.columns, axis=1).apply( lambda group: group.iloc[:, 0] if len(group.columns) == 1 else group.apply(list, axis=1) )
代码说明
groupby(df.columns, axis=1):按列名对DataFrame的列进行分组,所有同名列会被分到同一组- 匿名函数逻辑:如果分组仅包含1列(无重复),直接取该列的原始值;如果是多列(重复列),则把每一行的多个值合并成列表
- 最终生成的
result_df完全符合你需要的结构,重复列对应的行值以列表形式呈现
示例输出结果
针对你提供的原始数据,运行代码后会得到:
A B C D 0 [1,5] 2 3 4 1 [26,22] 7 12 17 2 [2,23] 8 13 18 3 [27,24] 9 14 19 4 [3,25] 10 15 20 5 [28,30] 29 30 30
对你现有代码的修正
你之前写的df[:,non_unique]是错误的Pandas索引写法,正确应为df.iloc[:, non_unique],但这种方式只能处理你手动识别的重复列,远不如groupby方法通用——它能自动识别所有重复列名并统一处理。
内容的提问来源于stack exchange,提问作者Drakkola
相关产品推荐
相关产品推荐

