You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并pandas DataFrame中指定列取值相同的多行数据

实现方案

核心思路

  • 先指定需要作为分组依据的字段(比如需求中的KEY,以及你额外需要保留的单列字段),同分组内的这些字段取值唯一,分组后直接保留即可
  • 对剩余字段编写通用聚合逻辑:自动判断列数据类型,字符串直接拼接,列表直接合并元素

完整实现代码

import pandas as pd

# 构造示例数据
d = {"KEY": ["KEY2", "KEY2"], "String value": ["value 1", "value 2"], "list value": [["val1"], ["val2"]]}
df = pd.DataFrame(d)

# 1. 定义通用聚合函数
def merge_cols(series):
    # 过滤空值避免影响拼接
    valid_values = [x for x in series if pd.notna(x)]
    if not valid_values:
        return None
    # 按类型处理拼接逻辑
    if isinstance(valid_values[0], str):
        # 字符串直接拼接,需要分隔符可以修改引号内的内容,比如' '代表空格分隔
        return ''.join(valid_values)
    elif isinstance(valid_values[0], list):
        # 合并所有列表元素
        res = []
        for lst in valid_values:
            res.extend(lst)
        return res
    # 其他类型可按需补充逻辑,比如数值求和可加return sum(valid_values)
    else:
        return valid_values[0]

# 2. 指定分组键:KEY + 其他你要保留的单列字段,比如有同KEY下值相同的date列,就写['KEY', 'date']
group_keys = ['KEY']
# 3. 分组聚合:分组键直接保留,其余列应用合并逻辑
res = df.groupby(group_keys, as_index=False).agg(merge_cols)

print(res)

运行效果验证

输出结果和需求预期一致:

KEY String value list value
0  KEY2  value 1value 2  [val1, val2]

注意事项

  • 若你需要保留的额外单列字段在同一分组内存在不同取值,可根据需求修改逻辑,比如取第一个/最后一个值,对应修改聚合函数即可
  • 字符串拼接如果需要添加分隔符(比如空格、顿号),修改聚合函数中''.join的引号内容即可,比如'、'.join(valid_values)即可用顿号分隔多个字符串值

内容的提问来源于stack exchange,提问作者Mr.Hedge

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 18:27:02