Python Pandas如何按用户ID分组执行mean、max等多种聚合运算
解决方案
核心逻辑是分两步执行:先按用户分组计算每个用户的自定义指标(你这里是两个条件的差值),再对所有用户的指标结果做聚合。groupby + apply的组合可以满足所有按用户维度自定义计算的通用需求,你可以任意调整用户级的计算逻辑,不需要局限于差值计算。
完整可运行代码
import pandas as pd # 示例数据 df = pd.DataFrame({'user': ['user1', 'user1', 'user2', 'user2'], 'condition': ['pl', 'md', 'pl', 'md'], 'value': [2, 4, 40, 42]}) # 自定义用户级指标计算函数,可根据需求修改内部逻辑 def calc_user_metric(user_group): pl_value = user_group.loc[user_group['condition'] == 'pl', 'value'].iloc[0] md_value = user_group.loc[user_group['condition'] == 'md', 'value'].iloc[0] # 这里返回的是每个用户的计算结果,可替换为任意你需要的用户级逻辑 return md_value - pl_value # 按用户分组计算每个用户的指标 user_metrics = df.groupby('user').apply(calc_user_metric) # 对所有用户的指标执行聚合,支持mean、max、median等任意聚合函数 agg_result = user_metrics.agg(['mean', 'max', 'median']) print(agg_result)
运行后得到的mean结果就是你预期的2。
简化写法(仅适用于固定双条件差值场景)
如果你的业务场景只是计算两个固定condition的差值,也可以用透视表简化代码:
# 转换为用户为行、condition为列的结构 pivot_df = df.pivot(index='user', columns='condition', values='value') # 直接计算差值列后聚合 agg_result = (pivot_df['md'] - pivot_df['pl']).agg(['mean', 'max', 'median'])
内容的提问来源于stack exchange,提问作者tom
相关产品推荐
相关产品推荐

