我有一个更大的数据框 ( A ) 和一个更小的数据框 ( B )。
A(较大的数据框)
from val null
Abc_1 45 76
Abc_2 46 77
Abc_3 47 78
Abc_4 48 79
Abc_5 49 80
Abc_6 50 81
Abc_7 51 82
Abc_8 52 83
Abc_9 53 84
Abc_10 54 85
.
.
.
B(较小的数据框)
from null
Abc_3 3
Abc_8 3
Abc_4 5
Abc_1 2
Abc_6 4
.
.
.
“from”列是两个数据框的索引。 B 数据帧的“来自”是 A 数据帧“来自”的子集,但它是混乱的(与 A 数据帧的顺序不同。)
我想做一些操作,取相应行的 B 数据框的“空”并替换 A 数据框的“空”
所以结果数据帧输出应该是这样的。
from val null
Abc_1 45 2
Abc_2 46 77
Abc_3 47 3
Abc_4 48 5
Abc_5 49 80
Abc_6 50 4
Abc_7 51 82
Abc_8 52 3
Abc_9 53 84
Abc_10 54 85
.
.
.
答案 0 :(得分:2)
使用 Series.map
by Series
from B
by select null
column an repalce nonmatched values by original column by Series.fillna
:
A['null'] = A.index.to_series().map(B['null']).fillna(A['null']).astype(int)
print (A)
val null
from
Abc_1 45 2
Abc_2 46 77
Abc_3 47 3
Abc_4 48 5
Abc_5 49 80
Abc_6 50 4
Abc_7 51 82
Abc_8 52 3
Abc_9 53 84
Abc_10 54 85
或者在 DataFrame.merge
中使用左连接,将 DataFrame.pop
用于提取列和 Series.fillna
:
注意:如果需要处理多列,此解决方案更好。
df = A.merge(B, on='from', how='left', suffixes=('','_'))
df['null'] = df.pop('null_').fillna(df['null']).astype(int)
print (df)
val null
from
Abc_1 45 2
Abc_2 46 77
Abc_3 47 3
Abc_4 48 5
Abc_5 49 80
Abc_6 50 4
Abc_7 51 82
Abc_8 52 3
Abc_9 53 84
Abc_10 54 85