Pandas重命名列后合并同名列的实现方案咨询
实现方案
你需要将重命名后重复列的所有值纵向拼接,其余列在原有值后补对应数量的-即可,具体实现代码如下:
import pandas as pd # 原有基础代码 df = pd.DataFrame({'Col_1': ['A', 'B', 'C'], 'Col_2': ['D', 'E', 'F'], 'Col_one':['G', 'H', 'I'],}) df.rename(columns={'Col_one' : 'Col_1'}, inplace=True) # 合并逻辑 # 1. 拼接所有Col_1列的取值 col1_all = pd.concat([df['Col_1']], ignore_index=True).tolist() # 2. 其他列补'-'至相同长度 target_len = len(col1_all) col2_all = df['Col_2'].tolist() + ['-'] * (target_len - len(df)) # 3. 生成最终DataFrame result = pd.DataFrame({ 'Col_1': col1_all, 'Col_2': col2_all }) # 验证输出 print(result.to_dict('list'))
运行后输出完全符合预期:
{'Col_1': ['A', 'B', 'C', 'G', 'H', 'I'], 'Col_2': ['D', 'E', 'F', '-', '-', '-']}
如果存在多个重复列、多个普通列的场景,可以使用通用适配代码:
# 统计各列名出现次数 col_cnt = df.columns.value_counts() merge_cols = col_cnt[col_cnt > 1].index other_cols = col_cnt[col_cnt == 1].index res_dict = {} # 处理需要合并的列 for col in merge_cols: res_dict[col] = pd.concat([df[col] for _ in range(col_cnt[col])], ignore_index=True).tolist() # 处理其余列 length = len(res_dict[merge_cols[0]]) for col in other_cols: res_dict[col] = df[col].tolist() + ['-']*(length - len(df)) result = pd.DataFrame(res_dict)
之前用pd.concat未得到预期结果的原因是你应该调用时用了axis=1横向拼接,这种方式只会保留重复列、按行索引对齐数据,不会自动把同名列的取值纵向堆叠,因此不符合需求。
内容的提问来源于stack exchange,提问作者user16178528
相关产品推荐
相关产品推荐

