Python 可以在视图或切片上使用此方法来修改原始数据帧吗?

Python 可以在视图或切片上使用此方法来修改原始数据帧吗?,python,pandas,dataframe,Python,Pandas,Dataframe,如果数据帧中的某些单元格值在一个组内,我想替换它们,但如果它们在另一个组内,则不想替换 例如,我创建了以下数据帧: 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列中用9替换

如果数据帧中的某些单元格值在一个组内,我想替换它们,但如果它们在另一个组内,则不想替换

例如,我创建了以下数据帧:

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列中用9替换任何2,用7替换任何3

df.loc[(df['1st']=='a')].replace({2:9, 3:7}, inplace = True)
df # same as original
这将尝试在切片的副本而不是视图上设置值,因此无法更新原始数据帧。也许这里正在进行一些链接索引。我希望dataframe的视图(仍然是dataframe类型)能够允许replace方法作用于视图,从而作用于原始视图

我发现唯一可行的方法是,对于要替换的每个列-值对,我需要使用一个命令:

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
有更好的方法吗

是否可以在数据帧视图上使用replace方法或其他方法来修改原始数据帧

我试图了解拷贝与视图,以及通过处理过滤结果来修改原始数据帧的最佳方式


谢谢你的帮助

尝试使用
更新

df.update(df.loc[(df['1st']=='a')].replace({2:9, 3:7}))
df
  1st  2nd  3rd
0   a  9.0  7.0
1   b  2.0  3.0
2   a  7.0  7.0
如果不想更改类型

df.loc[(df['1st']=='a')]=df.loc[(df['1st']=='a')].replace({2:9, 3:7})
df
  1st  2nd  3rd
0   a    9    7
1   b    2    3
2   a    7    7

谢谢你,尤本!这在这种情况下确实有效。有趣的是,它将变量类型更改为float64,而另一个方法将其保留为int。另外,如果我要在完整数据帧上处理
replace
,它不会更改数据类型。@PhasorLaser如果知道要更新的问题,可以执行astype(int)对于it@PhasorLaser我还添加了用于保留dtype的assign方法。我不知道如何将astype(int)用于此命令,但我看到了您的第二条注释。这也有助于有另一个选择。这是因为astype(int)在这种情况下不起作用吗?