我想替换数据框中的某些单元格值(如果它们在一个组内),但如果它们在其他组内则不替换。
例如,我创建以下数据框:
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
Run Code Online (Sandbox Code Playgroud)
我想将第一列过滤为“a”,然后仅在第二列中将任何 2 替换为 9,将 3 替换为 7。
df.loc[(df['1st']=='a')].replace({2:9, 3:7}, inplace = True)
df # same as original
Run Code Online (Sandbox Code Playgroud)
这尝试在切片的副本而不是视图上设置值,因此无法更新原始数据帧。也许这里正在进行一些链式索引。我希望数据帧的视图(仍然是数据帧类型)将允许替换方法作用于视图,从而作用于原始视图。
我发现唯一有效的方法是要求我对每个要替换的列值对使用一个命令:
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 …Run Code Online (Sandbox Code Playgroud)