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

