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

Pandas外连接匹配date与cod字段出现多余行如何解决

问题原因

你当前筛选dfx的逻辑是分别校验cod属于df1的cod值、date属于df1的date值,没有校验date+cod的组合是否真的存在于df1中:df2里的2021-06 14 NY行,cod=14和date=2021-06各自都存在于df1的对应列,但df1本身没有2021-06 + cod=14的组合,这行被误保留进dfx,外连接后就产生了多余的行。

修改后的代码

import pandas as pd

# 原测试数据保持不变
data1 = {'date': ['2021-06', '2021-06', '2021-07', '2021-07', '2021-07', '2021-07'], 'cod': ['12', '12', '14', '15', '15', '18'], 'Zone': ['LA', 'NY', 'LA', 'NY', 'PARIS', 'PARIS'], 'Revenue_Radio': [10, 20, 30, 50, 40, 10]}  
df_1 = pd.DataFrame(data1) 
data2 = {'date': ['2021-06', '2021-06', '2021-07', '2021-07', '2021-08'], 'cod': ['12', '14', '15', '15', '18'], 'Zone': ['PARIS', 'NY', 'LA', 'NY', 'NY'], 'Revenue_Str': [10, 20, 30, 50, 5]}  
df_2 = pd.DataFrame(data2) 

# 1. 提取df1中所有合法的date+cod组合
valid_keys = set(df_1[['date', 'cod']].itertuples(index=False, name=None))
# 2. 仅保留df2中date+cod组合在合法集合里的行,替换原dfx筛选逻辑
dfx = df_2[df_2[['date', 'cod']].apply(tuple, axis=1).isin(valid_keys)]
# 3. 外连接、补空、排序逻辑和原有逻辑保持一致
df = (df_1.merge(dfx, on=['date','cod','Zone'], how='outer')
  .fillna(0)
  .sort_values(['date','cod'], ignore_index=True))

结果验证

运行后输出的df和你给出的预期结果df_result完全一致,不存在多余的2021-06 14 NY行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:15:05