Как поменять два (строковых) значения в столбце с помощью панд - PullRequest
2 голосов
/ 21 марта 2019

Я пытаюсь одновременно replace значения в pandas df. Для 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

1 Ответ

1 голос
/ 21 марта 2019

Это известная проблема (и я полагаю, это статус-bydesign) - замена строковых значений на replace приводит к нелогичному поведению.

В этом случае мое предложениедолжен использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...