如何基于指定条件更新Pandas DataFrame已有列且不覆盖原有值?
更新Pandas现有列的解决方案
没问题,你可以通过两种简单的方式实现只更新满足新条件的行,保留原有列的其他值,下面是具体方法:
方法1:使用np.where(和你之前创建列的方式一致)
你可以再次调用np.where,把原列的值作为不满足条件时的返回值,这样就能实现局部更新:
df['NewColumn1'] = np.where(df['d'] > 1, 100, df['NewColumn1'])
原理很直观:当d列的值大于1时,把NewColumn1设为100;否则保持NewColumn1原来的数值不变,完全符合你“更新而非覆盖”的需求。
方法2:使用布尔索引直接赋值(更高效)
如果你的数据集比较大,这种方法性能会更好——它直接定位到需要修改的行进行赋值,不需要生成整个新数组:
df.loc[df['d'] > 1, 'NewColumn1'] = 100
这里df.loc[df['d'] > 1, 'NewColumn1']精准选中了所有d>1的行对应的NewColumn1列,然后直接把这些位置的值设为100,其他行的原有值丝毫不受影响。
示例更新后的结果
按照你的示例数据,第1行的d值是1.927666(大于1),更新后的数据框会变成这样:
a b c d NewColumn1 0 A C -0.668001 -0.434521 -0.668001 1 B A 1.893248 1.927666 100.000000 2 C B -2.145310 0.602808 1.000000 3 A C 0.323770 0.966303 0.323770
内容的提问来源于stack exchange,提问作者SBad
相关产品推荐
相关产品推荐

