我正在尝试同时替换pandas df中的值。看来函数是连续执行此操作的,因此最终替换的值将被覆盖。用下面,在这里X == Left
,我想更换A-D
,B-C
,C-B
,D-A
。如果我仅执行这些调用之一,则效果很好,但是当我执行全部四个调用时,效果却不佳。以下是我的尝试:
import pandas as pd
df = pd.DataFrame({
'X' : ['Left','Left','Left','Left','Right','Right','Right','Right'],
'Y' : ['A','B','C','D','A','B','C','D'],
})
ATTEMPT1:
df[(df['X'] == 'Left') & (df['Y'] == 'A')] = df['Y'].map({'A': 'D'})
df[(df['X'] == 'Left') & (df['Y'] == 'B')] = df['Y'].map({'B': 'C'})
df[(df['X'] == 'Left') & (df['Y'] == 'C')] = df['Y'].map({'C': 'B'})
df[(df['X'] == 'Left') & (df['Y'] == 'D')] = df['Y'].map({'D': 'A'})
出:
X Y
0 D D
1 C C
2 B B
3 A A
4 Right A
5 Right B
6 Right C
7 Right D
尝试2:
df.loc[(df['X'] == 'Left') & (df['Y'] == 'A'), 'Y'] = 'D'
df.loc[(df['X'] == 'Left') & (df['Y'] == 'B'), 'Y'] = 'C'
df.loc[(df['X'] == 'Left') & (df['Y'] == 'C'), 'Y'] = 'B'
df.loc[(df['X'] == 'Left') & (df['Y'] == 'D'), 'Y'] = 'A'
出:
X Y
0 Left A
1 Left B
2 Left B
3 Left A
4 Right A
5 Right B
6 Right C
7 Right D
预期输出:
X Y
0 Left D
1 Left C
2 Left B
3 Left A
4 Right A
5 Right B
6 Right C
7 Right D
IIUC做replace
一次
df.Y.update(df.loc[df['X'] == 'Left','Y'].replace({'A': 'D','B': 'C','C': 'B','D': 'A'}))
df
X Y
0 Left D
1 Left C
2 Left B
3 Left A
4 Right A
5 Right B
6 Right C
7 Right D
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句