首页 > 解决方案 > 在python中的分区上滚动总和

问题描述

代码:

data['rolling_sum'] = data.groupby(['User_id'])['Amount'].rolling().sum()

错误

TypeError: incompatible index of inserted column with frame index

请帮助找出代码中的错误。另一种方法也将受到赞赏。

标签: pythonpandasdataframe

解决方案


DataFrame.reset_index与 level=0 一起使用并drop=True删除第一级MultiIndex,因为按原始索引值对齐,所以更安全:

data = pd.DataFrame({
         'Amount':[5,3,6,9,2,4],
         'User_id':list('aababb')
})
data['rolling_sum1'] = data.groupby(['User_id'])['Amount'].rolling(2).sum().reset_index(level=0, drop=True)

如果仅分配 numpy 数组,则可能会错误地添加值:

data['rolling_sum2'] = data.groupby(['User_id'])['Amount'].rolling(2).sum().values
print (data)
   Amount User_id  rolling_sum1  rolling_sum2
0       5       a           NaN           NaN
1       3       a           8.0           8.0
2       6       b           NaN          12.0
3       9       a          12.0           NaN
4       2       b           8.0           8.0
5       4       b           6.0           6.0

推荐阅读