我顯然正在處理稍微復雜和真實的資料,但為了展示我的麻煩,讓我們假設我們有這些資料:
import pandas as pd
import numpy as np
purchases_df = pd.DataFrame({"user_id": [100, 101, 100, 101, 200],
"date": ['2022-01-01', '2022-01-01','2022-01-01','2022-01-01', '2022-01-01'],
"purchase": ['cookies', 'jam', 'jam', 'jam', 'cashews']})
我想按日期查找購買的模態值:
agg_mode = purchases_df.groupby(['date', 'user_id'])['purchase'].agg(pd.Series.mode)
agg_mode
agg_mode將表明user_id 100我們有兩個模態值:[cookies, jam]. 這對我來說完全沒問題,當涉及到真實資料時,我們已經提出了一組規則,如果出現平局,則選擇哪種模式。問題是,要使用該啟發式方法,我需要能夠檢查回傳的多個模態值的集合是否包含某些值(比方說,如果cookies和jam被回傳,我們總是jam只堅持。我找不到一個簡單的處理回傳的多模式值的方法:
agg_mode_df = purchases_df.groupby(['date', 'user_id'])['purchase'].agg(pd.Series.mode).to_frame()
agg_mode_df.reset_index(inplace=True)
agg_mode_df
agg_mode_df是一個 DataFrame,并且purchase列(現在包含模態值)在object dtypenumpyndarrays的情況下mode變為numpy user_id,并且我找不到將每個用戶的模態值轉換為的作業方法一個list。
這是我想太多了嗎?
提前致謝!
uj5u.com熱心網友回復:
IIUC,嘗試:
agg_mode = purchases_df.groupby(['date', 'user_id'])['purchase'].agg(lambda x: x.mode().tolist())
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/453441.html
