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
相关产品推荐
相关产品推荐

