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

如何在id匹配时将DataFrame的redness列值复制到另一个DataFrame

解决方法

首先要注意:你的两个DataFrame里id的数据类型不统一——df_p的id是字符串(比如'2'),df_c的id是整数(比如2),直接匹配会对应不上,得先统一类型。

下面提供两种可行的实现方式:

方式一:用merge(推荐用于复杂数据结构)

merge能自动处理df_c里的重复id,并且保留df_c的所有行,匹配不到的会显示NaN(后续可按需填充)。

import pandas as pd

# 你的原始数据
lst_p = [['2', 0], ['3', 1], ['4', 0], ['5', 0]]  
df_p = pd.DataFrame(lst_p, columns=['id', 'redness'])

lst_c = [['apple', 2], ['orange', 2], ['banana', 3], ['kiwi', 4], ['cherry', 5]]  
df_c = pd.DataFrame(lst_c, columns=['name', 'id'])

# 统一id类型:把df_p的id转为整数(也可以把df_c的id转成字符串,效果一样)
df_p['id'] = df_p['id'].astype(int)

# 左连接合并,保留df_c所有行,匹配对应redness值
df_c = df_c.merge(df_p, on='id', how='left')

执行后df_c的结果:

nameidredness
apple20
orange20
banana31
kiwi40
cherry50

方式二:用map(适合简单匹配场景)

先把df_p转成id到redness的映射字典,再给df_c新增列做映射:

# 统一类型后生成映射字典
redness_map = df_p.astype({'id': int}).set_index('id')['redness'].to_dict()

# 给df_c新增redness列
df_c['redness'] = df_c['id'].map(redness_map)

这个方法得到的结果和merge完全一致,若df_c里有df_p没有的id,对应位置会显示NaN。

额外提示

  • 如果需要处理匹配不到的id,可以用fillna()设置默认值,比如df_c['redness'] = df_c['redness'].fillna(-1)。
  • 要是df_p里存在重复id,merge会返回多对多的结果,map则会取最后一次出现的redness值,根据你的实际需求选择即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:01:12