我有以下数据框:
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 :)或过滤器仅对组有效。如何为组中的每一行应用计数和求和函数?
答案 0 :(得分:1)
IIUC首先使用cumcount
,然后使用cumsum
和sum
获得不同的
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