以百分位数进行汇总,并在python中对组进行计数

问题描述 投票:0回答:1

我是熟悉R的新python用户。

我想为各组计算用户定义的分位数,并完成各组中观察值的计数。

在R中,我会这样做:

df_sum <- df %>% group_by(group) %>% 
  dplyr::summarise(q85 = quantile(obsval, probs = 0.85, type = 8),
                   n = n())

在python中,我可以通过以下方式获得分组的百分位数:

df_sum = df.groupby(['group'])['obsval'].quantile(0.85)

如何向其中添加组数?

我尝试过:

df_sum = df.groupby(['group'])['obsval'].describe(percentile=[0.85])[[count]]
df_sum = df.groupby(['group'])['obsval'].quantile(0.85).describe(['count'])

示例数据:

data = {'group':['A', 'B', 'A', 'A', 'B', 'B', 'B', 'A', 'A'], 'obsval':[1, 3, 3, 5, 4, 6, 7, 7, 8]}
df = pd.DataFrame(data)
df

预期结果:

group  percentile count
A       7.4        5
B       6.55       4
python count grouping percentile
1个回答
0
投票

您可以使用pandas.DataFrame.agg()应用多种功能。在这种情况下,您应该使用numpy.quantile()

import pandas as pd
import numpy as np

data = {'group':['A', 'B', 'A', 'A', 'B', 'B', 'B', 'A', 'A'], 'obsval':[1, 3, 3, 5, 4, 6, 7, 7, 8]}
df = pd.DataFrame(data)
df_sum = df.groupby(['group'])['obsval'].agg([lambda x : np.quantile(x, q=0.85), "count"])
df_sum.columns = ['percentile', 'count']
print(df_sum)
© www.soinside.com 2019 - 2024. All rights reserved.