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

如何用Pandas合并行标签略有差异的两个DataFrame?

当然可以用Pandas搞定这个合并操作!

这种关联字段带细微格式差异的场景很常见,核心思路就是先统一字段格式,再进行合并。下面是具体的实现步骤,完全贴合你的需求:

步骤1:准备示例数据(和你的数据集对应)

先把你的两个DataFrame用代码构造出来(实际使用时直接读入你的本地数据即可):

import pandas as pd

df1 = pd.DataFrame({
    'Date': ['11/07/2020', '12/07/2020', '13/07/2020'],
    'Campaign': ['AMZ ABCDEFG', 'AMZ ABCDEFG', 'AMZ ABCDEFG'],
    'Units sold': [1, 2, 3],
    'Sales': ['$10', '$20', '$30']
})

df2 = pd.DataFrame({
    'Date': ['11/07/2020', '12/07/2020', '13/07/2020'],
    'Campaign': ['GA ABCDEFG', 'GA ABCDEFG', 'GA ABCDEFG'],
    'Clicks': [10, 15, 20],
    'Spend': ['$5', '$6', '$7']
})

步骤2:统一Campaign字段格式

两个DataFrame的Campaign分别带AMZ 和GA 前缀,我们先把前缀去掉,得到统一的ABCDEFG:

# 去掉df1的AMZ前缀
df1['Campaign'] = df1['Campaign'].str.replace('AMZ ', '')
# 去掉df2的GA前缀
df2['Campaign'] = df2['Campaign'].str.replace('GA ', '')

如果你的前缀不固定(比如后续可能出现其他前缀),可以用更通用的方法——按空格分割取后半部分:

# 不管前面是什么前缀,只保留空格之后的内容
df1['Campaign'] = df1['Campaign'].str.split(' ', n=1).str[1]
df2['Campaign'] = df2['Campaign'].str.split(' ', n=1).str[1]

步骤3:合并两个DataFrame

现在两个DataFrame的Date和Campaign已经完全匹配,用pd.merge()按这两个字段合并即可:

# 用inner join保证只保留两边都有的数据(你的场景正好全匹配)
merged_df = pd.merge(df2, df1, on=['Date', 'Campaign'], how='inner')

# 调整列顺序,和你的期望输出完全对齐
merged_df = merged_df[['Date', 'Campaign', 'Clicks', 'Units sold', 'Spend', 'Sales']]

最终结果

运行上面的代码后,merged_df就是你想要的输出:

Date  Campaign  Clicks  Units sold Spend Sales
0  11/07/2020  ABCDEFG      10           1    $5   $10
1  12/07/2020  ABCDEFG      15           2    $6   $20
2  13/07/2020  ABCDEFG      20           3    $7   $30

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 21:02:32