.agg总和将NaN转换为0

时间:2019-08-15 19:30:02

标签: python pandas

我试图将Pandas DataFrame合并到三天的窗口中。我有两列,A和B,我想在每个窗口中求和。我为任务编写的这段代码

    df = df.groupby(df.index // 3).agg({'A': 'sum', 'B':'sum'})

进行此总和时会将NaN值转换为零,但我希望它们保持NaN,因为我的数据具有实际的非NaN零值。

例如,如果我有这个df:

df = pd.DataFrame([
     [np.nan, np.nan],
     [np.nan, 0],
     [np.nan, np.nan],
     [2,   0],
     [4 ,  0],
     [0  , 0]
], columns=['A','B'])

Index A   B
0     NaN Nan
1     NaN 3
2     NaN Nan
3     2   0
4     4   0
5     0   0

我希望新的df是:

Index A   B
0     NaN 3
1     6   0

但是我当前的代码输出:

Index A   B
0     0   3
1     6   0

2 个答案:

答案 0 :(得分:1)

df.groupby(df.index // 3)['A', 'B'].mean()

以上代码段提供了上述示例输出。

如果您想求和,请查看df.groupby(df.index // 3)['A', 'B'].sum(min_count = 1)

另一个选项:

df.groupby(df.index // 3).agg({'A': lambda x: x.sum(skipna=False),
                           'B':lambda x: x.sum(skipna=True)})

答案 1 :(得分:0)

尝试使用以下代码:

df.groupby(df.index // 3).agg({'A': lambda x: x.sum(skipna=False),
                               'B':lambda x: x.sum(skipna=False)})
Out[282]: 
     A    B
0  NaN  NaN
1  6.0  0.0