我想对A列进行分组,然后对B列的最后3行进行求和.
df = pd.DataFrame()
df['A'] = [1,1,2,2]
df['B'] = [1,3,4,4]
我试过了.
df['sum_B_prevIoUs_3'] = df.groupby('A').B.shift(1).rolling(3,min_periods=0).sum()
df
A B sum_B_prevIoUs_3
0 1 1 0.0
1 1 2 1.0
2 1 3 3.0
3 1 4 6.0
4 2 1 5.0
5 2 2 4.0
6 2 3 3.0
7 2 4 6.0
但我想要.
A B sum_B_prevIoUs_3
0 1 1 0.0
1 1 2 1.0
2 1 3 3.0
3 1 4 6.0
4 2 1 0.0
5 2 2 1.0
6 2 3 3.0
7 2 4 6.0
为什么第4行和第5行得到错误的结果?如何纠正呢?
最佳答案
您可以使用
GroupBy.apply
为每个组调用lambda函数:
f = lambda x: x.shift(1).rolling(3,min_periods=0).sum()
df['sum_B_prevIoUs_3'] = df.groupby('A').B.apply(f)
print (df)
A B sum_B_prevIoUs_3
0 1 1 0.0
1 1 2 1.0
2 1 3 3.0
3 1 4 6.0
4 2 1 0.0
5 2 2 1.0
6 2 3 3.0
7 2 4 6.0
df['sum_B_prevIoUs_3'] = (df.groupby('A').B
.shift(1)
.groupby(df['A'])
.rolling(3,min_periods=0)
.sum()
.reset_index(level=0,drop=True))
print (df)
A B sum_B_prevIoUs_3
0 1 1 0.0
1 1 2 1.0
2 1 3 2.0
3 1 4 3.0
4 2 1 0.0
5 2 2 1.0
6 2 3 2.0
7 2 4 3.0