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

如何利用字典类型列中的键合并Pandas DataFrames

如何基于字典类型列中的键合并两个DataFrame

没问题,咱们可以通过提取字典列中的关键值生成关联列,再进行合并,具体步骤如下:

步骤1:从字典列中提取用于关联的字段

首先,我们需要把两个DataFrame里字典列中用来匹配的键值单独提取成一列,这样就有了合并的“桥梁”。

处理df_names,提取data字典里的key值:

import pandas as pd

df_names = pd.DataFrame([
    ['alpha', {'key': 'a'}],
    ['beta', {'key': 'b'}],
    ['gamma', {'key': 'g'}],
], columns=['name', 'data'])

# 提取字典中的key值作为新列
df_names['match_key'] = df_names['data'].apply(lambda x: x['key'])

处理df_symbols,提取meta字典里的english_letter值:

df_symbols = pd.DataFrame([
    ['α', {'english_letter': 'a'}],
    ['β', {'english_letter': 'b'}],
    ['γ', {'english_letter': 'g'}],
], columns=['symbol', 'meta'])

# 提取字典中的english_letter值作为匹配列,和df_names的match_key对应
df_symbols['match_key'] = df_symbols['meta'].apply(lambda x: x['english_letter'])

步骤2:基于新生成的匹配列合并DataFrame

现在两个DataFrame都有了同名的match_key列,直接用pd.merge()合并即可:

merged_df = pd.merge(df_names, df_symbols, on='match_key')
print(merged_df)

合并后的输出结果:

name        data match_key symbol               meta
0  alpha  {'key': 'a'}         a      α  {'english_letter': 'a'}
1   beta  {'key': 'b'}         b      β  {'english_letter': 'b'}
2  gamma  {'key': 'g'}         g      γ  {'english_letter': 'g'}

可选:一步到位(不生成中间列)

如果不想额外生成中间列,也可以直接在merge的left_on和right_on参数中指定提取逻辑,不过可读性会稍差一些:

merged_df = pd.merge(
    df_names,
    df_symbols,
    left_on=df_names['data'].apply(lambda x: x['key']),
    right_on=df_symbols['meta'].apply(lambda x: x['english_letter'])
)

这个方法和上面分步的结果完全一致,只是省去了中间列的创建。


内容的提问来源于stack exchange,提问作者Ikar Pohorský

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:27:09