【问题标题】:How to swap two (string) values in a column using pandas如何使用熊猫交换列中的两个(字符串)值
【发布时间】:2019-08-11 21:02:20
【问题描述】:

我正在尝试同时在 pandas df 中设置 replace 值。对于下面的df,我可以将X 替换为Y,反之亦然。但我必须同时这样做。如果我尝试将其作为单独的函数执行,结果显然会将所有内容交换到最终函数。

import pandas as pd

d = ({   
    'Col' : ['X','Y','X','Y','X'],
    })

df = pd.DataFrame(data=d)

df['Col'] = df['Col'].replace(['X'], 'Y') 
df['Col'] = df['Col'].replace(['Y'], 'X') 

print(df['Col'])

0    X
1    X
2    X
3    X
4    X

预期输出:

0    Y
1    X
2    Y
3    X
4    Y

【问题讨论】:

    标签: python string pandas replace


    【解决方案1】:

    这是一个已知问题(我相信是状态设计问题)-swapping string values with replace results in counter-intuitive behaviour.

    在这种情况下,我的建议是使用map 进行元素替换。

    df['Col'].map({'X': 'Y', 'Y': 'X'})
    
    0    Y
    1    X
    2    Y
    3    X
    4    Y
    Name: Col, dtype: object
    

    如果还有其他可能的值,而您只是交换两个,请添加 fillna 调用:

    df['Col'].map({'X': 'Y', 'Y': 'X'}).fillna(df['Col'])
    
    0    Y
    1    X
    2    Y
    3    X
    4    Y
    Name: Col, dtype: object
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-05
      • 2021-12-28
      相关资源
      最近更新 更多