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

如何在Pandas中按ID分组将DataFrame多行合并至单个单元格?

Pandas按ID合并多行数据到单个单元格

输入数据

import pandas as pd

dict1 = {'ID': ['6610', '6610', '6610', '6620', '6620', '7540', '7540'],
 'NEW_ID': ['6615',
  '6615',
  '6615',
  '   ',
  '                                                                                    ',
  nan,
  nan],
 'OLD_PRICE': [17.22, 17.9, 17.22, 27.49, 20.42, 30.73, 29.55],
 'NEW_PRICE': [17.22, 17.22, 27.49, 18.99, 27.49, 29.55, 27.49],
 'LABEL': ['  NaN1', '  NaN2', '  NaN4', nan, '  Na', 'A', 'B']}

df = pd.DataFrame(dict1)

解决方案

通过groupby按ID分组,对每列应用自定义清洗合并函数,处理空值、多余空格并合并去重后的内容:

def merge_and_clean(series):
    # 清洗步骤:去除空值、字符串前后空格,过滤空字符串
    cleaned = series.dropna().apply(lambda x: x.strip() if isinstance(x, str) else x)
    cleaned = cleaned[cleaned != '']
    # 去重后合并,用分号分隔
    return '; '.join(map(str, cleaned.unique())) if len(cleaned) > 0 else ''

# 按ID分组并聚合
merged_df = df.groupby('ID', as_index=False).agg(merge_and_clean)

处理后结果

执行以下代码查看输出:

print(merged_df)

输出内容:

ID NEW_ID          OLD_PRICE          NEW_PRICE          LABEL
0  6610   6615  17.22; 17.9; 17.22  17.22; 27.49; 17.22  NaN1; NaN2; NaN4
1  6620         27.49; 20.42         18.99; 27.49         Na
2  7540         30.73; 29.55         29.55; 27.49         A; B

说明

  • 自动处理NaN、空白字符串、字符串前后多余空格
  • 对每个ID下的列值去重,避免重复内容
  • 空值/无效值处理后显示为空单元格

内容的提问来源于stack exchange,提问作者kamel Derouiche

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 07:03:11