我正在尝试将 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
最佳答案
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)})
关于python - .agg Sum 将 NaN 转换为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57515136/