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

如何在Pandas DataFrame中合并三个数据集并生成拼接结果列?

在Pandas中合并多数据集生成合并结果列的解决方案

问题说明

现有三个数据集:

data_1 = {'ID': ['234', '456', '331', '134','372','456','765'], 
    'Result': ['A','A','A','A','A','A','A']}
data_2 = {'ID': ['456', '132', '098', '134','372','456','234'], 
    'Result': ['B','B','B','B','B','B','B']}
data_3 = {'ID': ['111', '132', '765', '134','234','999','765'], 
    'Result': ['C','C','C','C','C','C','C']}

需要生成如下结构的目标DataFrame:

new_df = {'ID': ['234', '111', '456', '331','132','999','765'], 
    'Result': ['ABC','C','AB','A','BC','C','AC']}

尝试左连接合并未得到预期结果,需用Pandas实现类似Excel多次查找的效果。

两种可行解决方案

方案一:纵向合并+分组聚合

这种方式更简洁,适合处理多数据集的合并拼接需求:

  1. 导入Pandas并转换数据集为DataFrame
import pandas as pd

df1 = pd.DataFrame(data_1)
df2 = pd.DataFrame(data_2)
df3 = pd.DataFrame(data_3)
  1. 纵向堆叠三个DataFrame
combined_df = pd.concat([df1, df2, df3], ignore_index=True)
  1. 按ID分组,去重后拼接Result值
    用set()去重单个ID的重复Result,sorted()保证字母按顺序排列:
agg_result = combined_df.groupby('ID')['Result'].agg(lambda x: ''.join(sorted(set(x))))
  1. 转换为目标格式并调整排序
new_df = agg_result.reset_index()
# 按ID排序(处理带前导零的ID,若无需可省略key参数)
new_df = new_df.sort_values('ID', key=lambda x: x.str.lstrip('0')).reset_index(drop=True)

方案二:多次左连接+列拼接

适合习惯用连接操作的场景:

  1. 导入Pandas并转换数据集为DataFrame(同方案一第一步)

  2. 依次左连接三个数据集

# 合并df1和df2,保留所有ID
merged = df1.merge(df2, on='ID', how='outer', suffixes=('_A', '_B'))
# 再合并df3
merged = merged.merge(df3, on='ID', how='outer')
  1. 拼接非空的Result列值
merged['Result'] = merged[['Result_A', 'Result_B', 'Result']].apply(
    lambda x: ''.join(sorted([v for v in x if pd.notna(v)])), axis=1
)
  1. 清理数据并调整格式
new_df = merged[['ID', 'Result']].drop_duplicates().reset_index(drop=True)
# 按ID排序
new_df = new_df.sort_values('ID', key=lambda x: x.str.lstrip('0')).reset_index(drop=True)

两种方案最终都会输出与目标一致的结果:

ID Result
0   234    ABC
1   111      C
2   456     AB
3   331      A
4   132     BC
5   999      C
6   765     AC

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 02:35:27