按百分位数汇总并计算 python 中的组
Aggregate by percentile and count for groups in python
我是熟悉 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)
我是熟悉 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)