Python-Replace строк в столбце, используя условие в другом столбце, используя словарь - PullRequest
0 голосов
/ 15 ноября 2018
A    B
abc  AN 
abd  BN
a01  CN
abc  BN
a02  CN

У меня есть датафрейм, аналогичный приведенному выше.Для каждого B=CN я хочу заменить соответствующую строку в A, т.е. a01, a02 значением из словаря.Словарь выглядит следующим образом:

d={'a01':'ana','a02':'aza'}

Всякий раз, когда я пытаюсь заменить значения, он дает неверный результат, либо значения находятся не на своем месте.Я тоже пробовал где пункт, но все еще что-то упустил.

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

В одной строке будет выглядеть так:

df.loc[df['B'].eq('CN'), 'A'] = df['A'].map(d)
df
     A   B
0  abc  AN
1  abd  BN
2  ana  CN
3  abc  BN
4  aza  CN

Также вы можете использовать np.where :

df['A'] = np.where(df['B'].eq('CN'), df['A'].map(d), df['A'])

Вот весь код с np.where:

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': ['abc', 'abd', 'a01', 'abc', 'a02'],
                   'B': ['AN', 'BN', 'CN', 'BN', 'CN']})

d = {'a01': 'ana', 'a02': 'aza'}

df['A'] = np.where(df['B'].eq('CN'), df['A'].map(d), df['A'])

df

     A   B
0  abc  AN
1  abd  BN
2  ana  CN
3  abc  BN
4  aza  CN
0 голосов
/ 15 ноября 2018

Используйте map, чтобы использовать словарь для сопоставления значений, и loc, чтобы присвоить значения определенному срезу:

CN = df['B'] == 'CN'
df['A'].loc[CN] = df[CN].A.map(d)
df

    A   B
0   abc AN
1   abd BN
2   ana CN
3   abc BN
4   aza CN
...