Python:如何在 X 出现之间对数据进行分组

问题描述

我有一个已经按时间排序的数据框,如下所示:

| type | time |
| :——- | :——- |
| B    | t1   |
| C    | t2   |
| A    | t3   |
| D    | t4   |
| C    | t5   |
| B    | t6   |
| A    | t7   |
| B    | t8   |
| D    | t9   |
| A    | t10  |

我想根据 A 的出现来切割数据框并最终得到以下结果:

group 1: {B:t1,C:t2}
group 2: {A:t3,D:t4,C:t5,B:t6}
group 3: {A:t7,B:t8,D:t9}
group 4: {A:t10} 

解决方法

使用GroupBy.apply 和 lambda 函数为字典创建的助手 Series 比较 typeA 与累积总和 Series.cumsum

f = lambda x: dict(zip(x['type'],x['time']))
df1 = (df.groupby(df['type'].eq('A').cumsum().add(1).rename('group'))
         .apply(f)
         .add_prefix('group ')
         .reset_index(name='new'))
print (df1)

     group                                           new
0  group 1                        {'B': 't1','C': 't2'}
1  group 2  {'A': 't3','D': 't4','C': 't5','B': 't6'}
2  group 3             {'A': 't7','B': 't8','D': 't9'}
3  group 4                                  {'A': 't10'}