我试图将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
答案 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