【问题标题】:Count the number of rows that come after each row by group按组计算每行之后的行数
【发布时间】:2019-08-22 18:47:52
【问题描述】:

我有以下数据框:

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:) 或 filter 只对这个组起作用。如何对组中的每一行应用计数和求和函数?

【问题讨论】:

  • 你在总结什么?
  • 你能解释一下 sum 背后的逻辑吗?
  • 抱歉,我意识到这很混乱。我更详细地编辑了这篇文章。我正在对 bin 列求和。因此对于 a 组的第 3 行,它将是 Sum(bin[4], bin[5])

标签: python pandas


【解决方案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

【讨论】:

    猜你喜欢
    • 2012-04-06
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 2019-02-17
    相关资源
    最近更新 更多