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

Pandas实现DataFrame筛选行赋值为另一DataFrame列值的方法

问题原因

原代码赋值失败是因为pandas赋值时默认按索引匹配:df1筛选出的符合条件的行索引为[0,4],而df2的索引为[0,1],仅索引重叠的位置(df1索引0)能成功赋值,索引4无匹配值因此为NaN。

解决方法

方法1:按行顺序直接赋值(适合df2行顺序和df1筛选结果顺序一致的场景)

提取df2的value值数组,忽略索引直接按顺序赋值给筛选出的行:

mask = (df1.unit_name == 'a') & (df1.is_required == 'Yes')
df1.loc[mask, 'value'] = df2['value'].values
df1['value'] = df1['value'].fillna('-')

方法2:关联匹配赋值(更稳妥,不受行顺序影响)

通过公共关联键做左连接匹配,不会因为行顺序错乱导致赋值错误:

# 拆分df1的dummy_column生成关联用的匹配字段
df1[['dummy1', 'dummy2', 'msg_column']] = df1['dummy_column'].str.split(' ', expand=True)
# 左关联匹配value字段
df1 = df1.merge(df2[['dummy1', 'dummy2', 'msg_column', 'value']], on=['dummy1', 'dummy2', 'msg_column'], how='left')
# 填充空值并删除临时匹配字段
df1['value'] = df1['value'].fillna('-')
df1 = df1.drop(columns=['dummy1', 'dummy2', 'msg_column'])

内容的提问来源于stack exchange,提问作者Suneha K S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:15:00