我有一个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
值,但是有没有更有效的方法呢?
谢谢, 克里斯
答案 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