我有两个数据框,即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。 非常感谢
答案 0 :(得分:3)
您可以在系列映射器上使用map
和fillna
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