Python - 在多个数据帧中交换值

EGM*_*686 7 python dataframe pandas

我有这样的DataFrame

id  val1   val2
0    A      B
1    B      B
2    A      A
3    A      A
Run Code Online (Sandbox Code Playgroud)

我想交换以下值:

id  val1   val2
0    B      A
1    A      A
2    B      B
3    B      B
Run Code Online (Sandbox Code Playgroud)

我需要考虑df可能有其他列我想保持不变.

cs9*_*s95 4

尝试stacking、mapping、然后unstacking:

df[['val1', 'val2']] = (
    df[['val1', 'val2']].stack().map({'B': 'A', 'A': 'B'}).unstack())

df
   id val1 val2
0   0    B    A
1   1    A    A
2   2    B    B
3   3    B    B
Run Code Online (Sandbox Code Playgroud)

对于(更快)更快的解决方案,请使用嵌套列表理解。

mapping = {'B': 'A', 'A': 'B'}
df[['val1', 'val2']] = [
    [mapping.get(x, x) for x in row] for row in df[['val1', 'val2']].values]

df
   id val1 val2
0   0    B    A
1   1    A    A
2   2    B    B
3   3    B    B
Run Code Online (Sandbox Code Playgroud)