熊猫总和两列,跳过NaN

时间:2014-06-24 12:27:19

标签: python pandas

如果我添加两列来创建第三列,那么任何包含NaN的列(表示我的世界中缺少数据)都会导致结果输出列为NaN。有没有办法在没有明确地将值设置为0的情况下跳过NaN(这会失去那些值是"缺少")的概念?

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]。

...谢谢

3 个答案:

答案 0 :(得分:29)

用fillna()

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

答案 1 :(得分:24)

另一种方法:

>>> frame["c"] = frame[["a", "b"]].sum(axis=1)
>>> frame
    a   b  c
0   1   3  4
1   2 NaN  2
2 NaN   4  4

答案 2 :(得分:2)

作为上述答案的扩展,执行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,则可以添加docs

中引用的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