如何从不同大小的DataFrame中基于ID向目标DataFrame添加列
给df1添加对应Id的amount列的几种方法
这是pandas里非常常见的数据匹配需求,我给你分享两个最实用的实现方式:
方法1:使用merge(最稳妥,适合各种场景)
merge是处理DataFrame关联的标准方法,通过指定关联键Id,并设置how='left'来保留df1的所有行:
import pandas as pd # 只关联df2里需要的Id和amount列,避免引入无关字段 df1_with_amount = df1.merge(df2[['Id', 'amount']], on='Id', how='left')
- 解释:
how='left'确保df1的每一行都被保留,哪怕df2里没有对应的Id,这时候amount列会填充为NaN; - 如果df2里有重复的
Id,merge会自动把所有匹配的行都关联进来,如果不需要重复,可以先给df2去重:df2.drop_duplicates(subset='Id', keep='first')。
方法2:使用map(代码更简洁,适合df2的Id无重复的情况)
如果df2里每个Id只对应一个amount值,用map会更高效简洁:
# 把df2转换成以Id为索引的Series,再用df1的Id列匹配 df1['amount'] = df1['Id'].map(df2.set_index('Id')['amount'])
- 解释:
df2.set_index('Id')['amount']生成一个以Id为键、amount为值的Series,map会自动将df1的每个Id对应到这个Series的value,没有匹配的则填充NaN。
两种方法都能满足你的需求,根据你的数据情况选就行~
内容的提问来源于stack exchange,提问作者Nod99
相关产品推荐
相关产品推荐

