我想将一个系列加到一个DataFrame的每一列上,具有相同的nansum行为:如果缺少一个组件,则返回另一个;如果两者都丢失则返回NaN / 0.
测试用例:
import numpy as np
import pandas as pd
df = pd.DataFrame([[np.nan, 1], [2, 2], [3, 4]])
ts = pd.Series([1, np.nan, 4])
尝试1(当缺少一个时给出nan):
df.add(ts, axis=0)
Out[115]:
0 1
0 NaN 2.0
1 NaN NaN
2 7.0 8.0
尝试2(抛出错误):
df.add(ts, axis=0, fill_value=0)
NotImplementedError: fill_value 0 not supported.
预期产出:
0 1
0 1 2
1 2 2
2 7 8
注意:我可以通过保存NaN的位置来做到这一点,用NaN填充为0并且当两者都是NaN时设置为NaN,但我正在寻找更好的解决方案。
答案 0 :(得分:3)
fill_value
除了None
之外的任何内容仍然有效,但截至目前,您必须解决此问题。执行添加,然后计算掩码以在需要时恢复NaN
。
r = df.fillna(0).add(ts.fillna(0), axis=0)
m = df.isnull().__and__(ts.isnull(), axis=0).values
v = r.values
v[m] = np.nan
r[:] = v
r
0 1
0 1.0 2.0
1 2.0 2.0
2 7.0 8.0