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

Pandas按ID合并DataFrame匹配异常问题咨询

问题分析与解决方案

核心问题

你需要基于id字段将DF1与DF2的home_rest、away_rest字段合并,保留DF1的所有行并忽略DF2中无关行,但之前的操作因匹配逻辑错误或字段类型不匹配导致失败:

  • 方法1的左连接无数据:大概率是id字段在两个DataFrame中的数据类型不一致(比如一个是整数,一个是字符串),导致无法匹配。
  • 方法2、3用索引/concat连接:是按行的位置索引而非id值匹配,自然会得到错误的顶部行数据。

正确解决步骤

1. 先统一id字段的数据类型

这是最常见的匹配失败原因,先检查并转换类型:

# 查看两个DataFrame的id字段类型
print("DF1 id类型:", df1['id'].dtype)
print("DF2 id类型:", df2['id'].dtype)

# 统一转换为整数类型(如果实际是字符串则改为astype(str))
df1['id'] = df1['id'].astype(int)
df2['id'] = df2['id'].astype(int)

2. 执行正确的字段匹配合并

使用pd.merge基于id字段做左连接(保留DF1所有行,匹配DF2对应数据),或者内连接(只保留两边都有的id行):

左连接(推荐,保留DF1全部行)

newdf = pd.merge(df1, df2[['id', 'home_rest', 'away_rest']], on='id', how='left')

内连接(仅保留DF1和DF2共有的id行)

newdf = pd.merge(df1, df2[['id', 'home_rest', 'away_rest']], on='id', how='inner')

额外注意事项

  • 如果DF2中存在重复的id值,合并后会出现多行数据,可先去重:
    df2 = df2.drop_duplicates(subset='id', keep='first')
    
  • 提前验证DF2中是否包含DF1的id值:
    # 统计DF1中有多少id存在于DF2中
    match_count = df1['id'].isin(df2['id']).sum()
    print(f"DF1中有{match_count}个id在DF2中匹配")
    
    如果结果为0,说明DF2中没有对应ID的数据,需要检查数据源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 23:12:12