按组计算每行之后的行数

时间:2019-04-01 14:48:03

标签: python pandas

我有以下数据框:

group bin
a 0
a 0
a 0
a 1 
a 1
b 0 
b 1
b 1

对于每组和每行,我想计算行数,即每行之后的行数,我还想取每行之后的行的总和。所以我想要的输出是这样:

group bin countafter sum
a     0   4          2
a     0   3          2
a     0   2          2 
a     1   1          1
a     1   0          0

b     0   2          2
b     1   1          1
b     1   0          0 

在这种情况下,组a中的总和将每一行之后的所有行的bin加起来。例如,在组a的第4行中,bin = 1之后只有一行,所以sum为1。

按组进行操作,然后执行apply(lambda x :)或过滤器仅对组有效。如何为组中的每一行应用计数和求和函数?

1 个答案:

答案 0 :(得分:1)

IIUC首先使用cumcount,然后使用cumsumsum获得不同的

df['countafter']=df.groupby('group').cumcount(ascending=False)
df['sum']=df.groupby('group').bin.transform('sum')-df.groupby('group').bin.cumsum()
df
Out[7]: 
  group  bin  countafter  sum
0     a    0           4    2
1     a    0           3    2
2     a    0           2    2
3     a    1           1    1
4     a    1           0    0
5     b    0           2    2
6     b    1           1    1
7     b    1           0    0