同时替换pandas df中的多个值

准男友:

我正在尝试同时替换pandas df中的值。看来函数是连续执行此操作的,因此最终替换的值将被覆盖。用下面,在这里X == Left,我想更换A-DB-CC-BD-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
YOBEN_S:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章