如何在Pandas分组聚合时按条件计算中位数?
可以在groupby聚合中实现这类条件过滤
当然可以实现,你只需要为每个列定义带条件过滤的自定义聚合函数,在计算中位数前先筛选出符合要求的数值,再执行中位数计算。
修改后的完整代码
import pandas as pd import numpy as np cols = ['name', 'performance', 'activity'] data = [ ['bob', 50, 95], ['bob', 0, 80], ['bob', 82, 4], ['bob', 50, 120], ['joey', 37, 50], ['joey', -4, 70], ['joey', 95, 70], ['joey', 35, 70]] df = pd.DataFrame(data, columns=cols) # 定义带条件的聚合函数 def median_non_negative(x): return np.median(x[x >= 0]) def median_ge_10(x): return np.median(x[x >= 10]) # 分组聚合时指定自定义函数 df = df.groupby(['name']).agg({ 'performance': median_non_negative, 'activity': median_ge_10 }) print(df)
代码说明
- 针对
performance,先通过x[x >= 0]筛选出所有非负值,再计算中位数; - 针对
activity,通过x[x >= 10]筛选出≥10的数值后计算中位数; - 如果某个分组中符合条件的数值为空(比如某用户所有performance都是负数),计算结果会返回
NaN,你可以根据需求添加fillna处理这类情况。
输出结果
运行后会得到:
performance activity name bob 50.0 87.5 joey 36.0 70.0
内容的提问来源于stack exchange,提问作者user13744439
相关产品推荐
相关产品推荐

