Pandas:如何按用户计算每日金额求和后的中位数
解决方案
你现在的问题出在:第一次groupby(['user_id', 'date'])得到的是包含两层索引(用户ID、日期)的Series,直接调用.median()会对所有用户的每日求和值计算全局中位数,而非按用户单独计算。
要实现每个用户的每日金额求和值的中位数,有两种简洁的实现方式:
方式一:基于现有结果二次分组
先保存每日求和的结果,再按user_id再次分组计算中位数:
# 先得到每个用户每天的金额总和 daily_money_sum = df_append.groupby(['user_id', 'date'])['money'].sum() # 按用户ID分组,计算每组(即单个用户的所有每日求和值)的中位数 user_daily_sum_median = daily_money_sum.groupby('user_id').median()
方式二:一步完成分组计算
利用groupby的level参数,直接对第一层索引(user_id)分组计算中位数:
user_daily_sum_median = df_append.groupby(['user_id', 'date'])['money'].sum().groupby(level='user_id').median()
或者用嵌套分组的写法,逻辑更直观:
user_daily_sum_median = df_append.groupby('user_id').apply( lambda user_data: user_data.groupby('date')['money'].sum().median() )
执行后你会得到一个以user_id为索引,对应值为该用户所有每日金额求和值中位数的Series。
内容的提问来源于stack exchange,提问作者MegaKarg
相关产品推荐
相关产品推荐

