簡體   English   中英

如何根據行中的特定值和熊貓中的另一列對行進行分組?

[英]How to group rows based on specific value in a row and another column in pandas?

我想不出用一句話來問這個問題的好方法,所以我會展示我想做什么。

假設我有一個表,每一行都是一個由某人通過圖書租賃過程觸發的事件。 我們有 2 個事件,籃子(包含他們想要的書)和結帳(結帳成功並租借圖書時觸發)。 我想按名稱分組,但也想按結帳事件和它之前的每個籃子事件分組。 這是一個僅按 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       |
|-------------------------------------------------|

我的問題是如何分組以便每個組中有 1 個結帳事件,如下所示:

第一個訂單

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

對不起,如果這措辭很糟糕。

假設您的表位於 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創建一個拆分數據幀數組,例如orders[0]orders[1]等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM