[英]Conditional grouped iteration over a Pandas DataFrame
我有以下 DataFrame:
用戶 | event_id | event_creation | 事件_b | 美元 |
---|---|---|---|---|
一個 | 1 | 2021/07/01 | 鈉 | 10 |
一個 | 2 | 2021/07/02 | 2021/07/17 | 10 |
一個 | 3 | 2021/07/22 | 2021/08/02 | 10 |
一個 | 4 | 2021/07/24 | 2021/08/02 | 10 |
一個 | 5 | 2021/07/24 | 2021/08/06 | 10 |
一個 | 6 | 2021/08/16 | 2021/01/29 | 10 |
b | 7 | 2021/08/18 | 2021/10/14 | 10 |
我想根據條件聚合 sum_cum 創建一個新列。
按用戶分組,遍歷 event_ids,
對於每個 event_id,查看所有以前的事件並將 event_b 日期小於當前事件創建日期的所有事件的美元金額相加。
所以我會得到以下DataFrame:
用戶 | event_id | event_creation | 事件_b | 美元 | sum_cum |
---|---|---|---|---|---|
一個 | 1 | 2021/07/01 | 鈉 | 10 | 0 |
一個 | 2 | 2021/07/02 | 2021/07/17 | 10 | 0 |
一個 | 3 | 2021/07/22 | 2021/08/02 | 10 | 10 |
一個 | 4 | 2021/07/24 | 2021/08/02 | 10 | 10 |
一個 | 5 | 2021/07/24 | 2021/08/06 | 10 | 10 |
一個 | 6 | 2021/08/16 | 2021/01/29 | 10 | 40 |
b | 7 | 2021/08/18 | 2021/10/14 | 10 | 0 |
我試圖創建循環但沒有任何結果,我希望解釋清楚,謝謝你的幫助:)
嘗試這個:
df.apply(
lambda x: df[
(df.event_b < x.event_creation) &
(df.event_id < x.event_id) &
(df.user == x.user)
].USD.sum(),
axis=1)
您也可以使用groupby
代替df.user == x.user
如果您有一個非常大的數據集,它可能會變得很慢,因為您正在為每一行切片 df。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.