[英]Pandas sum two columns, skipping NaN
如果我添加两列来创建第三列,任何包含 NaN(代表我的世界中缺失的数据)的列都会导致结果输出列也是 NaN。 有没有办法跳过 NaN 而不将值显式设置为 0(这会失去这些值“缺失”的概念)?
In [42]: frame = pd.DataFrame({'a': [1, 2, np.nan], 'b': [3, np.nan, 4]})
In [44]: frame['c'] = frame['a'] + frame['b']
In [45]: frame
Out[45]:
a b c
0 1 3 4
1 2 NaN NaN
2 NaN 4 NaN
在上面,我希望 c 列是 [4, 2, 4]。
谢谢...
使用填充()
frame['c'] = frame.fillna(0)['a'] + frame.fillna(0)['b']
或按照建议:
frame['c'] = frame.a.fillna(0) + frame.b.fillna(0)
给予:
a b c
0 1 3 4
1 2 NaN 2
2 NaN 4 4
另一种方法:
>>> frame["c"] = frame[["a", "b"]].sum(axis=1)
>>> frame
a b c
0 1 3 4
1 2 NaN 2
2 NaN 4 4
作为上述答案的扩展,执行frame[["a", "b"]].sum(axis=1)
会将所有 NaN 的总和填充为 0
>>> frame["c"] = frame[["a", "b"]].sum(axis=1)
>>> frame
a b c
0 1 3 4
1 2 NaN 2
2 NaN 4 4
3 NaN NaN 0
如果您希望所有 NaN 的总和为 NaN,您可以添加文档中引用的 min_count 标志
>>> frame["c"] = frame[["a", "b"]].sum(axis=1, min_count=1)
>>> frame
a b c
0 1 3 4
1 2 NaN 2
2 NaN 4 4
3 NaN NaN NaN
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.