传递百分位数给pandas agg函数

2024-04-26 06:26:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我想通过pandas的agg()函数传递numpy percentile()函数,就像下面对其他numpy统计函数所做的那样。

现在我有一个数据框,它看起来像这样:

AGGREGATE   MY_COLUMN
A           10
A           12
B           5
B           9
A           84
B           22

我的代码如下:

grouped = dataframe.groupby('AGGREGATE')
column = grouped['MY_COLUMN']
column.agg([np.sum, np.mean, np.std, np.median, np.var, np.min, np.max])

上面的代码可以工作,但是我想做一些

column.agg([np.sum, np.mean, np.percentile(50), np.percentile(95)])

即指定要从agg()返回的各种百分比

应该怎么做?


Tags: 数据函数代码numpypandasmynpcolumn
3条回答

也许不是超级高效,但有一种方法是自己创建一个函数:

def percentile(n):
    def percentile_(x):
        return np.percentile(x, n)
    percentile_.__name__ = 'percentile_%s' % n
    return percentile_

然后将其包含在您的agg中:

In [11]: column.agg([np.sum, np.mean, np.std, np.median,
                     np.var, np.min, np.max, percentile(50), percentile(95)])
Out[11]:
           sum       mean        std  median          var  amin  amax  percentile_50  percentile_95
AGGREGATE
A          106  35.333333  42.158431      12  1777.333333    10    84             12           76.8
B           36  12.000000   8.888194       9    79.000000     5    22             12           76.8

请注意,这是如何做应该虽然。。。

对于50%和95%的百分比,请尝试此操作:

column.describe( percentiles = [ 0.5, 0.95 ] )

更具体地说,如果您只想使用percentile函数聚合pandas groupby结果,python lambda函数提供了一个非常简洁的解决方案。使用问题的符号,加上百分位95,应该是:

dataframe.groupby('AGGREGATE').agg(lambda x: np.percentile(x['COL'], q = 95))

您还可以将此函数分配给变量,并将其与其他聚合函数一起使用。

相关问题 更多 >