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

Pandas实现不同DataFrame间列值匹配并新增对应数据列

问题描述

我有两个大小不同的DataFrame,需要基于指定列的匹配值,将第二个DataFrame的其余对应列数据合并到第一个DataFrame中。

示例数据

原始df(original_df)

original_df = pd.DataFrame({'Patients': ['Kevin', 'John', 'Marry', 'Joe'],
                            'Region': ['New York', 'Austin', 'Dallas', 'Dallas']})

打印效果如下:

Patients    Region
0    Kevin  New York
1     John    Austin
2    Marry    Dallas
3      Joe    Dallas

区域映射df(region_df)

region_df = pd.DataFrame({'Region': ['New York', 'Portland', 'Dallas', 'Austin', 'Vermont'],
                          'Lat': [10, 14, 13, 16, 15],
                          'Long': [19.1, 12.1, 16.2, 21.5, 29.3]})

打印效果如下:

Region  Lat  Long
0  New York   10  19.1
1  Portland   14  12.1
2    Dallas   13  16.2
3    Austin   16  21.5
4   Vermont   15  29.3

预期输出结果

Patients    Region  Lat  Long
0    Kevin  New York   10  19.1
1     John    Austin   16  21.5
2    Marry    Dallas   13  16.2
3      Joe    Dallas   13  16.2

解决方案

直接使用pandas的merge方法做左连接即可,指定匹配列为Region,保留原始df的所有行,匹配上的自动填充区域对应的经纬度数据:

import pandas as pd
# 合并操作
result_df = original_df.merge(region_df, on='Region', how='left')

如果需要直接修改原original_df而不是生成新的df,可以直接赋值:

original_df = original_df.merge(region_df, on='Region', how='left')

代码说明

  • on='Region':指定两个df匹配的公共列名,如果两个df对应的匹配列名不一样,可以用left_on和right_on分别指定左右表的匹配列
  • how='left':表示使用左连接,完全保留左表(这里是original_df)的所有行,右表(region_df)只有匹配上的行才会把对应列的值带过来,不会新增原始df里没有的行,也不会丢失原始df的现有行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:27:02