如何在保留NaN的情况下执行多个序列的逐元素求和

时间:2019-01-25 13:39:37

标签: python python-3.x pandas

我有一个Pandas DataFrame,例如:

df = pd.DataFrame([[1.0, np.nan, 3.0], 
                   [4.0, 5.0, 6.0], 
                   [np.nan, np.nan, np.nan],
                   [np.nan, 8.0, 9.0],
                   [0.0, 0.0, 0.0]], 
                  columns=['a', 'b', 'c'])

df =
     a    b    c
0  1.0  NaN  3.0
1  4.0  5.0  6.0
2  NaN  NaN  NaN
3  NaN  8.0  9.0
4  0.0  0.0  0.0

我想对每一行进行求和,以使NaN被忽略(即视为0),除非整行是NaN(例如,第2行)。所需的答案是:

column_sum(df) =

0   4.0 
1  15.0  
2   NaN 
3  17.0 
4   0.0

请注意,第2行的总和为NaN,而第4行的总和为0.0。必须保持这种区别。

我尝试过:

df.sum(axis=1, skipna=True) = 

0     4.0
1    15.0
2     0.0
3    17.0
4     0.0

,第2行为0.0。使用.fillna(0)做同样的事情。

我可以看到一种方法,可以逐列屏蔽NaN值,但是有没有更有效的方法呢?

谢谢, 克里斯

1 个答案:

答案 0 :(得分:1)

DataFrame.sum中使用参数min_count=1,默认值(0)返回0而不是NaN

print(df.sum(axis=1, min_count=1))
0     4.0
1    15.0
2     NaN
3    17.0
4     0.0
dtype: float64