You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 02:30:44