如何在Python中按org与dest包含匹配条件连接DataFrame
Python实现DataFrame的特殊匹配连接需求
我们需要将两个DataFrame(df1和df2)按照特定规则连接生成新的DataFrame df3:
- 连接键包含
org列,要求两表的org值完全匹配 - 对于
dest列,df1的dest值需存在于df2的dest列按/分割后的集合中(比如df2的dest为A/B/C,则df1的dest为A、B、C均符合匹配条件)
示例数据
df1数据:
Name org dest Ashok A B Rahul A C Anupa B A Sam A B
df2数据:
org dest Amount A A/B/C 10 B C 20 A W 30
实现步骤
- 先处理df2,把
dest列按/分割后展开成多行,让每个拆分后的dest值对应原有的org和Amount:
处理后的df2_expanded结构如下:import pandas as pd # 构造示例数据 df1 = pd.DataFrame({ 'Name': ['Ashok', 'Rahul', 'Anupa', 'Sam'], 'org': ['A', 'A', 'B', 'A'], 'dest': ['B', 'C', 'A', 'B'] }) df2 = pd.DataFrame({ 'org': ['A', 'B', 'A'], 'dest': ['A/B/C', 'C', 'W'], 'Amount': [10, 20, 30] }) # 拆分df2的dest列并展开 df2_expanded = df2.assign(dest=df2['dest'].str.split('/')).explode('dest')org dest Amount A A 10 A B 10 A C 10 B C 20 A W 30 - 使用
merge方法将df1和处理后的df2_expanded按org和dest做左连接:df3 = df1.merge(df2_expanded, on=['org', 'dest'], how='left') - 若需要将结果中的
NaN替换为空字符串,与期望输出完全一致,执行以下代码:df3['Amount'] = df3['Amount'].fillna('')
最终结果
处理后得到的df3如下:
Name org dest Amount 0 Ashok A B 10 1 Rahul A C 10 2 Anupa B A 3 Sam A B 10
内容的提问来源于stack exchange,提问作者aeapen
相关产品推荐
相关产品推荐

