python - 根据条件在行之间的 Pandas 中分组

标签 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

我想做的是合并 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/

相关文章:

python - Pandas :Groupby Fillna 不工作

python - Pandas 在 1 个图的 11 个图中绘制 22 个系列

python - 从 Pandas 数据框中绘制累积图表?

python - 如何在 pandas 中重置 cumsum streak

python - 如何将 django 中的自定义 ID 字段重命名为默认值

python - Python BDD 工具的 Bazel 测试规则 "behave"

python - 如何使用 if、elif 和 else 运行多参数函数?

python - "Unable to find a matching set of capabilities"-- 使用 Python 2.7 的 Selenium

python - 使用 sum() 和 mean() 进行分组

python - 如何从 pandas Dataframe groupby 对象获取一系列 json/字典