如何根据其他数据框条件替换数据框列中的值

时间:2018-08-24 16:14:26

标签: python-3.x pandas dataframe replace

我有两个数据框,即XXX和替代。

XXX = pd.DataFrame({'A':['One', 'Two', 'Three'], 'B': [6,4,3], 'C': ['red','green','blue']})

override = pd.DataFrame({'A':['One','Two'], 'C': ['apple','pie']})

我正在寻找替换XXX数据帧的C列的值的最佳方法,其中替代数据帧的A列的值 等于数据框XXX的A列中的值。

我尝试使用XXX ['C'] = XXX.merge(覆盖,=“ =” A“)。 C_y,但“三”行的“蓝色”值被NaN代替,但是 我想保留原始的“蓝色”值。

使用A字段作为键来执行此操作的最佳和最有效的方法是什么?XXX.A = override.A。  非常感谢

2 个答案:

答案 0 :(得分:3)

您可以在系列映射器上使用mapfillna

In [1077]: XXX.A.map(override.set_index('A')['C']).fillna(XXX.C)
Out[1077]:
0    apple
1      pie
2     blue
Name: A, dtype: object

In [1078]: XXX.C = XXX.A.map(override.set_index('A')['C']).fillna(XXX.C)

In [1079]: XXX
Out[1079]:
       A  B      C
0    One  6  apple
1    Two  4    pie
2  Three  3   blue

答案 1 :(得分:1)

使用update

XXX=XXX.set_index('A')
XXX.update(override.set_index('A'))
XXX
Out[471]: 
       B      C
A              
One    6  apple
Two    4    pie
Three  3   blue
XXX.reset_index()
Out[472]: 
       A  B      C
0    One  6  apple
1    Two  4    pie
2  Three  3   blue