我想添加两个包含多个索引的系列,其中一个可以包含NaN值。只添加两个(a + b)不起作用,因为a
中的某些索引条目可能不会出现在b
中,反之亦然。
这是我目前针对索引(b, 50)
失败的方法,因为此值应为NaN。
In [41]: a = pd.Series([1, 2, 3, np.nan, np.nan], index=pd.MultiIndex.from_tuples([('a', '1'), ('a', 2), ('b', 1), ('b', 50), ('b', 5)], names=['x', 'y']))
In [42]: b = pd.Series([4, 5, 6], index=pd.MultiIndex.from_tuples([('a', '1'), ('a', 3), ('b', 5)], names=['x', 'y']))
In [43]: c = pd.Series(0, index=a.index.union(b.index))
In [44]: c[a[a.notnull()].index] = a[a.notnull()]
In [45]: c
Out[45]:
x y
a 2 2.0
3 0.0
1 1.0
b 1 3.0
5 0.0
50 0.0
dtype: float64
In [46]: c[b.index] += b
In [47]: c
Out[47]:
x y
a 2 2.0
3 5.0
1 5.0
b 1 3.0
5 6.0
50 0.0
dtype: float64
In [48]: c[a.isnull() & b.isnull()] = np.NaN
In [49]: c
Out[49]:
x y
a 2 2.0
3 5.0
1 5.0
b 1 3.0
5 6.0
50 0.0
dtype: float64
答案 0 :(得分:2)
IIUC,这是你需要的吗?
a.add(b,fill_value=0)
Out[398]:
x y
a 1 5.0
2 2.0
b 1 3.0
50 NaN
5 6.0
a 3 5.0
dtype: float64
答案 1 :(得分:1)
您可以先对齐两个系列。
s1, s2 = a.align(b)
s = s1.fillna(0) + s2.fillna(0)
s[s1.isna() & s2.isna()] = np.nan
# output of s
x y
a 1 5.0
2 2.0
b 1 3.0
50 NaN
5 6.0
a 3 5.0
dtype: float64