如何根据一行和另一列中的特定值对行进行分组?

2024-10-02 00:27:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我想不出用一句话问这个问题的好方法,所以我会告诉大家我想做什么

假设我有一个表,其中每一行都是一个事件,由经历图书租赁过程的人触发。我们有两个事件,basket(包含他们想要的书籍)和checkout(当checkout成功并且书籍被租用时触发)。我想按名称分组,但也要按结帐事件和之前的每个篮子事件分组。下面是一个分组在name=“tim”上的示例组

|-------------------------------------------------|
| time | name |  stage   |        payload         |
|-------------------------------------------------|
| 1000 | tim  |  basket  | harrypotter;twilight;  |
|-------------------------------------------------|
| 1001 | tim  |  basket  | harrypotter;           |
|-------------------------------------------------|
| 1002 | tim  | checkout | Order# 123456789       |
|-------------------------------------------------|
| 1003 | tim  |  basket  | pandasfordummies;      |
|-------------------------------------------------|
| 1004 | tim  | checkout | Order# 145246263       |
|-------------------------------------------------|

我的问题是如何分组,以便每个组中都有一个签出事件,如下所示:

一阶

|-------------------------------------------------|
| time | name |  stage   |        payload         |
|-------------------------------------------------|
| 1000 | tim  |  basket  | harrypotter;twilight;  |
|-------------------------------------------------|
| 1001 | tim  |  basket  | harrypotter;           |
|-------------------------------------------------|
| 1002 | tim  | checkout | Order# 123456789       |
|-------------------------------------------------|

二阶

|-------------------------------------------------|
| time | name |  stage   |        payload         |
|-------------------------------------------------|
| 1003 | tim  |  basket  | pandasfordummies;      |
|-------------------------------------------------|
| 1004 | tim  | checkout | Order# 145246263       |
|-------------------------------------------------|

如果这句话用得太过分,我很抱歉


Tags: 方法nametime事件orderstagepayload书籍
1条回答
网友
1楼 · 发布于 2024-10-02 00:27:09

假设您的表位于pandas数据框中,并且已按时间和名称排序,则可以使用以下代码:

import numpy as np
import pandas as pd

df = pd.DataFrame({'time': [1000, 1001, 1002, 1003, 1004],
               'name':['tim', 'tim', 'tim', 'tim', 'tim'],
               'stage':['basket', 'basket', 'checkout', 'basket', 'checkout'],
               'payload':['harrypotter;twilight;', 'harrypotter;', 'Order# 123456789', 'pandasfordummies;', 'Order# 145246263']})

orders = np.split(df, np.where(df.stage == 'checkout')[0] + 1)

这将在orders中创建一个分割数据帧数组,您可以像orders[0]orders[1]等正常访问该数组

相关问题 更多 >

    热门问题