使用 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
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