繁体   English   中英

Pandas 对两列求和,跳过 NaN

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM