在 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]
。这对我来说完全没问题,当涉及到真实数据时,我们已经提出了一套规则,如果出现平局则选择哪种模式。 问题 是,要使用该启发式方法,我需要能够检查返回的多模态值集是否包含某些值(比方说,如果 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 dtype
和 numpy ndarrays
在多个情况下mode
对于 user_id
,我找不到将每个用户的模态值转换为 list
.
的有效方法
我是不是想多了?
提前致谢!
IIUC,尝试:
agg_mode = purchases_df.groupby(['date', 'user_id'])['purchase'].agg(lambda x: x.mode().tolist())
我显然正在处理稍微复杂和真实的数据,但为了展示我的麻烦,让我们假设我们有这些数据:
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 dtype
和 numpy ndarrays
在多个情况下mode
对于 user_id
,我找不到将每个用户的模态值转换为 list
.
我是不是想多了?
提前致谢!
IIUC,尝试:
agg_mode = purchases_df.groupby(['date', 'user_id'])['purchase'].agg(lambda x: x.mode().tolist())