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

如何合并字典值中以共同键关联的pandas DataFrame

动态合并字典中的多个Pandas DataFrame

问题背景

我有一个字典data,所有值都是Pandas DataFrame,结构如下:

{'x':    player         x1
 0         foo          x_val
 1         bar          x_val,

 'y':    player         y1
 0        foo          y_val
 1        bar          y_val,
 'z':     player       z1
 0         foo        z_val
 1         bar        z_val
}

需要以player为键合并所有DataFrame,得到包含所有列的合并结果。但字典中的DataFrame数量不固定,无法用硬编码逐个merge的方式实现,尝试过循环和异常处理都没成功。

解决方案

方法1:用functools.reduce迭代合并

这是通用方案,不管列名是否重复都适用:

from functools import reduce
import pandas as pd

# 提取字典里所有的DataFrame
df_list = list(data.values())
# 迭代合并所有DataFrame,指定合并键和方式
merged_df = reduce(lambda left_df, right_df: left_df.merge(right_df, on='player', how='outer'), df_list)
  • reduce会自动遍历df_list,把每个DataFrame和前一次的合并结果再合并
  • how='outer'保留所有player的数据,若只需要保留所有DataFrame共有的player,换成how='inner'即可

方法2:索引拼接(适合无重复列名场景)

如果每个DataFrame除了player之外的列名都是唯一的(比如示例中的x1、y1、z1),可以用更高效的拼接方式:

import pandas as pd

# 把每个DataFrame的索引设为player,然后横向拼接
df_list = [df.set_index('player') for df in data.values()]
merged_df = pd.concat(df_list, axis=1).reset_index()

这种方式避免了多次merge的开销,速度更快,但如果存在重复列名,Pandas会自动给列名加后缀(如x1_x、x1_y),需要提前处理列名冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 12:45:12