pandas中筛选替换列值后仅更新原DataFrame指定位置值的方法
Pandas按条件替换列值并更新原DataFrame
问题说明
现有如下基础DataFrame:
df = pd.from_dict({ 'a': [1,2,1,2,1], 'b': [1,1,3,3,1] })
需求为提取a列,基于b列的取值替换其中部分值,当前尝试使用的代码如下:
df.loc[df['b']== 3]['a'].replace(2,1)
上述写法属于链式索引,操作的是DataFrame切片生成的副本,修改不会同步到原数据。需要实现仅修改筛选出的特定位置的值,其余值保持不变,期望运行结果如下:
df = pd.from_dict({ 'a': [1,2,1,1,1], 'b': [1,1,3,3,1] })
正确实现方案
直接在loc中同时指定行、列筛选条件,在原数据视图上完成赋值即可,避免链式索引问题:
# 定位b列值为3的行的a列,将其中值为2的内容替换为1 df.loc[df['b'] == 3, 'a'] = df.loc[df['b'] == 3, 'a'].replace(2, 1)
也可以用逻辑判断直接赋值,写法更简洁:
# 同时满足b=3且a=2的位置,a列赋值为1 df.loc[(df['b'] == 3) & (df['a'] == 2), 'a'] = 1
运行代码后打印df,即可得到目标结果:
a b 0 1 1 1 2 1 2 1 3 3 1 3 4 1 1
内容的提问来源于stack exchange,提问作者INGl0R1AM0R1
相关产品推荐
相关产品推荐

