我是熟悉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
您可以使用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)