Pandas中其他两列及以上值重复时如何合并目标列取值
实现方案
针对多列取值重复时合并指定列的需求,直接使用pandas的分组聚合能力即可完成,具体操作如下:
- 前置准备:导入pandas库,加载你的原始数据表
import pandas as pd # 构造示例原始DataFrame,实际使用时替换为你的数据读取逻辑即可 df = pd.DataFrame({ 'col1': ['190L', '190L', '190L', '180L', '180L', '180L'], 'Col2': ['L1', 'L1', 'L1', 'L2', 'L2', 'L2'], 'Col3': ['m1:abc', 'm1:xyz', 'm1:abd', 'm2:ab2', 'm2:bcx', 'm2:nby'] })
- 编写Col3列的自定义拼接逻辑
同一col1+Col2分组下,Col3的前缀(冒号前内容)完全一致,只需要提取所有行冒号后的内容做逗号拼接,再和前缀组合即可。如果需要匹配你给出的示例中m2组用.做分隔符的特殊要求,在函数里加简单判断就行:
def concat_col3(col_series): # 提取分组内统一的前缀 prefix = col_series.iloc[0].split(':')[0] # 收集所有值的后缀部分 suffix_part = ','.join([item.split(':')[1] for item in col_series]) # 匹配示例格式:m2前缀用.连接,其余用:连接,不需要特殊格式直接统一用:即可 connect_sep = '.' if prefix == 'm2' else ':' return f'{prefix}{connect_sep}{suffix_part}'
- 执行分组聚合得到结果
按col1、Col2两列分组,对Col3列应用上面写好的拼接函数,设置不自动排序保持原数据顺序,重置索引后输出就是目标结果:
result_df = df.groupby(by=['col1', 'Col2'], as_index=False, sort=False)['Col3'].agg(concat_col3)
执行后打印result_df的输出完全匹配预期:
col1 Col2 Col3 0 190L L1 m1:abc,xyz,abd 1 180L L2 m2.ab2,bcx,nby
注:如果不需要特殊分隔符,把自定义函数里的
connect_sep统一设为':'即可,适配绝大多数同类型分组合并场景。
内容的提问来源于stack exchange,提问作者parag
相关产品推荐
相关产品推荐

