我显然是在处理稍微复杂和现实的数据,但是为了展示我的麻烦,让我们假设我们有这些数据:
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,如果user_id
有多个mode
,那么purchase
列(它现在保存了模态值)变成了具有numpy ndarrays
的object dtype
的列,而且我无法找到一种工作方法来将每个用户的模态值转换为list
。
我是不是想过头了?
发布于 2022-03-30 17:07:06
IIUC,试着:
agg_mode = purchases_df.groupby(['date', 'user_id'])['purchase'].agg(lambda x: x.mode().tolist())
https://stackoverflow.com/questions/71681271
复制相似问题