使用字典中的其他列中的条件用Python替换一列中的行

时间:2018-11-15 05:23:25

标签: python-3.x pandas dataframe data-science

A    B
abc  AN 
abd  BN
a01  CN
abc  BN
a02  CN

我有一个与上面类似的数据框。对于每个B=CN,我想用字典中的值替换A中的相应行,即a01a02。 字典如下:

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

每当我尝试替换值时,都会给出错误的结果,或者值放置不正确。我也尝试了where子句,但仍然缺少某些内容。

2 个答案:

答案 0 :(得分:1)

一行中的内容如下所示:

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

答案 1 :(得分:0)

使用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