根据条件在行之间的熊猫中分组

tha*_*sdr 2 python pandas pandas-groupby

假设我有以下数据框:

   name  number
0     A     100
1     B     200
2     B      30
3     A      20
4     B      30
5     A      40
6     A      50
7     A     100
8     B      10
9     B      20
10    B      30
11    A      40
Run Code Online (Sandbox Code Playgroud)

我想做的是合并所有连续的行,其中name == 'B',在的两行之间与name == 'A'并获得相应的总和。因此,我希望最终输出看起来像这样:

    name  number
0    A     100
1    B     230
2    A      20
3    B      30
4    A      40
5    A      50
6    A     100
7    B      60
8    A      40
Run Code Online (Sandbox Code Playgroud)

use*_*203 6

我们可以在这里使用一些groupby技巧。创建一个带有的遮罩,A然后将的每个后续组B移入各自的组。该答案假定您的name系列包含A和B。


c = df['name'].eq('A')
m1 = c.cumsum()

m = m1.where(c, m1 + m1.max())

df.groupby(m, sort=False, as_index=False).agg({'name': 'first', 'number': 'sum'})
Run Code Online (Sandbox Code Playgroud)

  name  number  
0    A     100  
1    B     230  
2    A      20  
3    B      30  
4    A      40  
5    A      50  
6    A     100  
7    B      60  
8    A      40  
Run Code Online (Sandbox Code Playgroud)