在 pandas 中处理多种模式

Processing multiple modes in pandas

我显然正在处理稍微复杂和真实的数据,但为了展示我的麻烦,让我们假设我们有这些数据:

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]。这对我来说完全没问题,当涉及到真实数据时,我们已经提出了一套规则,如果出现平局则选择哪种模式。 问题 是,要使用该启发式方法,我需要能够检查返回的多模态值集是否包含某些值(比方说,如果 cookiesjam 返回,我们总是坚持只使用 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 dtype 和 numpy ndarrays 在多个情况下mode 对于 user_id,我找不到将每个用户的模态值转换为 list.

的有效方法

我是不是想多了?

提前致谢!

IIUC,尝试:

agg_mode = purchases_df.groupby(['date', 'user_id'])['purchase'].agg(lambda x: x.mode().tolist())