gpt4 book ai didi

python - 可以在 View 或切片上使用 Pandas 替换方法来修改原始数据帧吗?

转载 作者:行者123 更新时间:2023-12-03 23:45:26 41 4
gpt4 key购买 nike

如果它们在一个或多个组内,我想替换数据框中的某些单元格值,但如果它们是另一个组,则不替换。
例如,我创建以下数据框:

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
我想将第一列过滤为“a”,然后仅将第二列中的任何 2s 替换为 9s,将 3s 替换为 7s。
df.loc[(df['1st']=='a')].replace({2:9, 3:7}, inplace = True)
df # same as original
这会尝试在切片的副本而不是 View 上设置值,因此无法更新原始数据帧。也许这里正在进行一些链式索引。我希望数据框的 View (仍然是数据框类型)允许替换方法作用于 View ,从而作用于原始 View 。
我发现唯一可以工作的东西要求我对每个要替换的列值对使用一个命令:
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
有一个更好的方法吗?
可以在数据框的 View 上使用替换方法或其他方法来修改原始数据吗?
我试图了解副本与 View 以及通过处理过滤结果来修改原始数据框的最佳方法。
谢谢你的帮助!

最佳答案

试试 update

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

关于python - 可以在 View 或切片上使用 Pandas 替换方法来修改原始数据帧吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63065554/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com