如何基于另一个DataFrame的行值为目标DataFrame新增列赋值?
在Pandas中根据匹配值新增列
需求:给df1新增z1列,根据df1的x1值匹配df2的x2,取对应的y2值填充。
方法一:字典映射(map())
这是最直接高效的方式,先从df2构建映射关系,再给df1赋值:
# 从df2创建x2到y2的映射字典 x2_to_y2 = df2.set_index('x2')['y2'] # 给df1新增z1列 df1['z1'] = df1['x1'].map(x2_to_y2)
方法二:DataFrame合并(merge())
通过合并操作将两个表关联,提取需要的列:
# 左连接合并,保留df1所有行 df1 = df1.merge(df2, left_on='x1', right_on='x2', how='left') # 重命名y2为z1,删除多余的x2列 df1 = df1.rename(columns={'y2': 'z1'}).drop(columns='x2')
执行结果
两种方法都能得到预期的df1:
x1 y1 z1 0 0.0 0.000000 0.00 1 0.0 0.071429 0.00 2 0.0 0.142857 0.00 3 3.0 0.214286 0.25 4 3.0 0.285714 0.25 5 3.0 0.357143 0.25 6 6.0 0.428571 0.50 7 6.0 0.500000 0.50 8 6.0 0.571429 0.50 9 9.0 0.642857 0.75 10 9.0 0.714286 0.75 11 9.0 0.785714 0.75 12 12.0 0.857143 1.00 13 12.0 0.928571 1.00 14 12.0 1.000000 1.00
适用场景
- 如果只是单一列的映射,优先用
map(),速度更快,代码更简洁。 - 如果需要同时匹配多列数据,或者映射关系复杂,用
merge()更灵活。
内容的提问来源于stack exchange,提问作者Marc Schwambach
相关产品推荐
相关产品推荐

