如何将特定值从一个数据帧填充到另一个数据帧

时间:2021-04-07 07:16:57

标签: python pandas numpy join merge

我有一个更大的数据框 ( 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
.
.
.

1 个答案:

答案 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