如何利用字典类型列中的键合并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ý
相关产品推荐
相关产品推荐

