方法1
使用unstack
将第一层索引放入列中,然后使用fillna
series_A.unstack(0).fillna(series_B).unstack().dropna()
bar one 0.299368
two 0.123000
baz one -0.863838
two -0.251905
foo one 1.063327
two 0.456000
qux one 0.206053
quz two 0.408204
dtype: float64
方法 2
使用add
方法结合其level
和fill_value
参数,然后再使用combine_first
series_A.combine_first(series_A.add(series_B, level=0, fill_value=0))
bar one 0.299368
two 0.123000
baz one -0.863838
two -0.251905
foo one 1.063327
two 0.456000
qux one 0.206053
quz two 0.408204
dtype: float64
第三种方法
使用series_A.index.get_level_values(0)
返回的Index
对象上的map
函数,其中可调用的函数是series_B.get
series_A.fillna(
pd.Series(series_A.index.get_level_values(0).map(series_B.get), series_A.index)
)
bar one 0.299368
two 0.123000
baz one -0.863838
two -0.251905
foo one 1.063327
two 0.456000
qux one 0.206053
quz two 0.408204
dtype: float64
第四种方法
使用np.isnan
和np.flatnonzero
查找np.nan
的位置。然后使用get_level_values
和map
查找要插入的值。最后,使用iloc
将其放入相应位置。
i = np.flatnonzero(np.isnan(series_A.values))
series_A.iloc[i] = series_A.index.get_level_values(0)[i].map(series_B.get)
series_A
bar one 0.299368
two 0.123000
baz one -0.863838
two -0.251905
foo one 1.063327
two 0.456000
qux one 0.206053
quz two 0.408204
dtype: float64