如何使用groupby函数计算列分位数并指定获取75分位值?
如何在pandas分组聚合中指定75分位统计
你需要给quantile()方法显式传递分位点参数q=0.75——因为该方法默认使用的是0.5(中位数)分位点。以下是几种实用的实现方式:
方法1:用lambda函数直接指定
df2 = df1.groupby(pd.Grouper(freq='5Min', closed='right', label='right')).agg({ "value1": "mean", "value2": "max", "value3": lambda x: x.quantile(q=0.75) })
注:这种方式生成的value3对应列名是<lambda>,如果需要更直观的名称,可以后续执行df2.rename(columns={"value3": "value3_q75"})修改。
方法2:用命名聚合规则(推荐,列名更清晰)
直接在聚合时定义列名和对应规则,无需后续重命名:
df2 = df1.groupby(pd.Grouper(freq='5Min', closed='right', label='right')).agg( value1_mean=("value1", "mean"), value2_max=("value2", "max"), value3_q75=("value3", lambda x: x.quantile(q=0.75)) )
生成的DataFrame列名将直接是value1_mean、value2_max、value3_q75,可读性更强。
方法3:用partial固定参数(适合复用场景)
如果需要多次使用75分位统计,可以预先固定参数:
from functools import partial # 定义固定75分位的函数并指定名称 q75 = partial(pd.Series.quantile, q=0.75) q75.__name__ = 'q75' df2 = df1.groupby(pd.Grouper(freq='5Min', closed='right', label='right')).agg({ "value1": "mean", "value2": "max", "value3": q75 })
内容的提问来源于stack exchange,提问作者prof31
相关产品推荐
相关产品推荐

