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

如何合并两个Pandas DataFrame,生成逗号分隔的匹配值列?

Pandas复合索引多对多合并:将匹配值合并为逗号分隔列

现有两个Pandas DataFrame:

  • eig_df:人员数据表,以KG-EZ和EZ为复合索引,索引不唯一
  • gst_df:人员名下的地块数据表,同样以KG-EZ和EZ为复合索引,索引不唯一

源数据代码:

import pandas as pd

eig_df = pd.DataFrame({
    'KG-EZ': [50101,50101,50101,50101,50103],
    'EZ': [17,18,19,19,1],
    'Name': ['Name1','Name2','Name3','Name4','Name5']
})
eig_df.set_index(['KG-EZ', 'EZ'], inplace=True)

gst_df = pd.DataFrame({
    'KG-EZ': [50101,50101,50101,50101,50101,50103,50103],
    'EZ': [17,17,18,19,19,1,1],
    'GST-NR': ['GST1','GST2','GST3','GST4','GST5','GST6','GST7']
})
gst_df.set_index(['KG-EZ', 'EZ'], inplace=True)

需求:为eig_df新增GST-NR列,该列包含gst_df中所有匹配索引的GST-NR值,以逗号分隔,预期结果如下:

result_df = pd.DataFrame({
    'KG-EZ': [50101,50101,50101,50101,50103],
    'EZ': [17,18,19,19,1],
    'Name': ['Name1','Name2','Name3','Name4','Name5'],
    'GST-NR': ['GST1,GST2','GST3','GST4,GST5','GST4,GST5','GST6,GST7']
})
result_df.set_index(['KG-EZ', 'EZ'], inplace=True)

解决方案

先把gst_df里同一复合索引下的所有GST-NR合并成一个逗号分隔的字符串,再通过索引和eig_df合并,避免产生重复行。

1. 聚合地块编号

对gst_df按复合索引分组,将每组的GST-NR直接拼接为逗号分隔的字符串:

gst_agg = gst_df.groupby(level=['KG-EZ', 'EZ'])['GST-NR'].apply(','.join)

2. 合并到人员表

利用join()方法基于复合索引合并,两个表的索引会自动匹配对应:

result_df = eig_df.join(gst_agg)

验证结果

打印result_df即可得到预期输出:

print(result_df)

输出结果:

Name      GST-NR
KG-EZ EZ                        
50101 17       Name1  GST1,GST2
      18       Name2        GST3
      19       Name3  GST4,GST5
      19       Name4  GST4,GST5
50103 1        Name5  GST6,GST7

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 17:39:24