【发布时间】:2020-07-24 10:01:08
【问题描述】:
如果数据框中的某些单元格值在一个组中,我想替换它们,但如果它们是其他组,则不替换。
例如,我创建以下数据框:
import pandas as pd
df = pd.DataFrame([['a',2,3],['b',2,3],['a',3,3]], columns = ['1st', '2nd', '3rd'])
df
1st 2nd 3rd
0 a 2 2
1 b 2 3
2 a 3 3
我想在第 1 列过滤到 'a',然后仅在第 2 列将任何 2 替换为 9 和 3 替换为 7。
df.loc[(df['1st']=='a')].replace({2:9, 3:7}, inplace = True)
df # same as original
这会尝试在切片的副本而不是视图上设置值,因此无法更新原始数据帧。也许这里有一些链式索引。我希望数据框的视图(仍然是数据框类型)允许替换方法作用于视图,从而作用于原始数据。
我发现唯一可行的方法是,我要为每个要替换的列值对使用一个命令:
df.loc[(df['1st']=='a') & (df['2nd']==2), '2nd'] = 9
df.loc[(df['1st']=='a') & (df['2nd']==3), '2nd'] = 7
df # It worked
1st 2nd 3rd
0 a 9 2
1 b 2 3
2 a 7 3
有没有更好的方法来做到这一点?
是否可以在数据框的视图上使用替换方法或其他方法来修改原始数据?
我正在尝试了解副本与视图以及通过处理过滤结果来修改原始数据框的最佳方法。
感谢您的帮助!
【问题讨论】: