![](/img/trans.png)
[英]Pandas: How to apply a value to a group of rows based on a specific row value?
[英]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.