5

我正在尝试将 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
4

2 回答 2

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)})
于 2019-08-15T19:52:55.607 回答
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
于 2019-08-15T19:39:57.033 回答