如何基于第一个dataframe的列值从另一dataframe添加新列
实现方案
你可以用pandas的关联或映射功能实现需求,以下是两种常用的实现方式:
方法1:左连接匹配(适用多字段匹配场景)
以df的所有行为基准,按省份字段匹配population表的人口数据,保留df全部原有行:
import pandas as pd # 确保两个表的省份列名、值格式完全一致(拼写、大小写、无前后空格) merged_df = pd.merge( left=df, right=population, on='Province', # 若两个表省份列名不同,可替换为left_on='df的省份列名', right_on='population的省份列名' how='left' )
方法2:字典映射(适用单字段一对一匹配,运行效率更高)
先把population转换为「省份-人口」的映射字典,再给df新增列直接映射取值:
# 构造省份到人口的映射字典 pop_map = population.set_index('Province')['Population'].to_dict() # 直接给原df新增Population列 df['Population'] = df['Province'].map(pop_map)
注意事项
- 匹配前先检查
population的省份列是否有重复值,避免匹配后行数异常增多,检查命令:population['Province'].duplicated().any(),返回True时先做去重处理 - 匹配后可检查人口列是否有缺失值:
df['Population'].isnull().sum(),返回值大于0说明df中存在population表里没有收录的省份,需要核对拼写或补充人口数据 - 若需要保留示例的列顺序,可以在最终输出前手动调整列序:
df = df[['Product', 'Province', 'Quantity', 'Population']]
内容的提问来源于stack exchange,提问作者cugara
相关产品推荐
相关产品推荐

