A B
abc AN
abd BN
a01 CN
abc BN
a02 CN
我有一个与上面类似的数据框。对于每个B=CN
,我想用字典中的值替换A中的相应行,即a01
,a02
。
字典如下:
d={'a01':'ana','a02':'aza'}
每当我尝试替换值时,都会给出错误的结果,或者值放置不正确。我也尝试了where子句,但仍然缺少某些内容。
答案 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