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

合并Pandas DataFrame并为重复匹配项生成列表

解决方法:分组聚合+左连接实现列表合并

我来帮你搞定这个问题,不用手动遍历或者复杂操作,用pandas内置的分组聚合就能高效实现需求,而且完美适配大体积的df2:

步骤分解

  • 第一步:先对df2按A列分组,把每个分组对应的C列值聚合为列表。这一步只处理C列,完全符合你“仅提取C列”的要求,而且分组聚合是pandas的高效操作,比遍历快得多。
  • 第二步:把聚合后的结果和df1做左连接,这样就能自动匹配对应行,没有匹配的行C列会自动填充为NaN,正好是你想要的目标格式。

完整代码示例

import pandas as pd

# 初始化你的两个DataFrame
df1 = pd.DataFrame([['ida', 1], ['idb', 2], ['idc', 3]], columns=['A','B'])
df2 = pd.DataFrame([['idb', 20], ['ida', 10], ['idb', 21], ['idb', 22]], columns=['A', 'C'])

# 对df2分组聚合,将C列转为列表
df2_grouped = df2.groupby('A')['C'].agg(list).reset_index(name='C')

# 和df1左连接得到目标df3
df3 = df1.merge(df2_grouped, on='A', how='left')

print(df3)

运行后输出的df3就是你要的结果:

A  B                C
0  ida  1             [10]
1  idb  2  [20, 21, 22]
2  idc  3              NaN

后续统计扩展(均值、标准差)

既然你后续需要计算列表的均值、标准差,这里也给你补充一个便捷方法,不用额外处理:

# 计算均值和标准差,空值保持为None
df3['C_mean'] = df3['C'].apply(lambda x: pd.Series(x).mean() if pd.notna(x) else None)
df3['C_std'] = df3['C'].apply(lambda x: pd.Series(x).std() if pd.notna(x) else None)

这样df3就会新增C_mean和C_std列,直接得到统计结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:24:03