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)
我们可以在这里使用一些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)
| 归档时间: |
|
| 查看次数: |
45 次 |
| 最近记录: |