使用 Python 计算数据集中十分位数的平均成绩,按另一个字段分组

Calculating mean grades for deciles within a dataset with Python, grouped by another field

import pandas as pd  
import csv



df_orig = pd.read_csv('test_sample.csv')  
df_orig = df_orig[(df_orig['number']>0)]  
decile_stats = df_orig.groupby(pd.qcut(df_orig.number, 5))['number'].mean()  


print(decile_stats)

我正在尝试使用 python 来计算我的数据集的十分位数的统计数据。我可以使用 qcut 计算每个十分位数的平均值,但我想根据第二列中的值对我的数字进行分组。这样,根据家庭列中的值计算十分位数并报告值。

家庭号码
0 1000 0.04
1 1000 0.20
2 1000 0.04
3 1000 0.16
4 1000 0.08
5 1000 0.02
6 1000 0.02
7 1000 0.02
8 1000 0.64
9 1000 0.04

我想要的输出是:

Q1 1000 0.028617
Q2 1000 0.105060
Q3 1000 0.452467
Q4 1000 2.644886
Q5 1000 141.749797...

等每个显示 'family',在这种情况下为 1000、2000、3000。

IIUC,你可以使用:

N = 3
labels = [f'Q{i}' for i in range(1, N+1)]
decile = lambda x: x.groupby(pd.qcut(x['number'], N, labels=labels)).mean()

out = df.groupby('family').apply(decile)['number'].rename('mean').reset_index()

输出:

>>> out
   family number      mean
0    1000     Q1  0.030000
1    1000     Q2  0.080000
2    1000     Q3  0.333333