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

Pandas:基于运行时动态值更新DataFrame字段

动态从df2取值更新df1的feat列

这个需求其实挺常见的,我之前处理类似场景时,主要分两种情况来实现,看你df2里是单条更新规则还是多条批量更新:

情况1:df2只有单条更新规则(和你的示例一致)

先从df2里动态提取我们需要的条件值和更新值,再用Pandas的loc方法精准定位并更新:

import pandas as pd

# 构造示例数据
df1 = pd.DataFrame({
    'Steam': [1, 2, 3, 4],
    'feat': ['some_value']*4
})

df2 = pd.DataFrame({
    'cola': [2],
    'colb': [88]
})

# 从df2动态提取条件和更新值
condition_val = df2['cola'].iloc[0]
update_val = df2['colb'].iloc[0]

# 执行更新
df1.loc[df1['Steam'] == condition_val, 'feat'] = update_val

# 查看结果
print(df1)

执行后就能得到你期望的输出:

Steam         feat
0      1  some_value
1      2          88
2      3  some_value
3      4  some_value

情况2:df2有多条更新规则(批量更新)

如果之后df2里有多个Steam值对应不同的feat更新内容,用字典映射的方式会更高效,不用写多个判断:

# 构造多条规则的df2示例
df2 = pd.DataFrame({
    'cola': [2, 4],
    'colb': [88, 99]
})

# 将df2转成{Steam值: 更新值}的字典
update_map = df2.set_index('cola')['colb'].to_dict()

# 用map匹配更新,未匹配到的保留原feat值
df1['feat'] = df1['Steam'].map(update_map).fillna(df1['feat'])

print(df1)

输出结果:

Steam         feat
0      1  some_value
1      2          88
2      3  some_value
3      4          99

这种方法避免了循环,处理大数据集时性能会好很多,而且扩展性强,新增更新规则只需要在df2里加行就行。

内容的提问来源于stack exchange,提问作者Doubt Dhanabalu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:38:33