假设我有以下数据框:
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
我想做的是合并 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
最佳答案
我们可以在这里使用一些 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'})
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
关于python - 根据条件在行之间的 Pandas 中分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57221151/