如何用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
相关产品推荐
相关产品推荐

