计算最低 n 个百分位数的平均值
Calculate the average of the lowest n percentile
我有以下数据集。我想找到较低的 20 个百分位数的平均值 运行。例如:
如果我将 运行s 列分成 5 个批次,那么前两行将位于第 20 个百分位。所以这两行的平均值 运行 将是 (1+2)/2 = 1.5
如何将数据框分成 5 个批次(排序),然后找到该特定组的平均值?
我已尝试使用以下内容,但输出显示 2.8 而不是 3
d.runs.quantile(0.2)
输入:
ODI_runs = {'name': ['Tendulkar', 'Sangakkara', 'Ponting',
'Jayasurya', 'Jayawardene', 'Kohli',
'Haq', 'Kallis', 'Ganguly', 'Dravid'],
'runs': [1,2,3,4,5,6,7,8,9,10]}
d = pd.DataFrame(ODI_runs)
name runs
Tendulkar 1
Sangakkara 2
Ponting 3
Jayasurya 4
Jayawardene 5
Kohli 6
Haq 7
Kallis 8
Ganguly 9
Dravid 10
输出:
1.5
尝试:
>>> df['runs'].sort_values().head(round(0.2*len(df))).mean()
1.5
如果要获取所有结果,请使用pd.cut
:
labels = ['1st', '2nd', '3rd', '4th', '5th']
out = df['runs'].groupby(pd.cut(df['runs'], bins=5, labels=labels)).mean()
print(out)
# Output
runs
1st 1.5
2nd 3.5
3rd 5.5
4th 7.5
5th 9.5
Name: runs, dtype: float64
您可以使用 pandas.DataFrame.quantile
方法:检索分隔我们使用的数据的前 20% 的值 df["runs"].quantile(0.2)
。那么,就是全部 pandas:使用 loc 定位正确的行和列,并计算这些值的 .mean()
:
>> df.loc[df["runs"] <= df["runs"].quantile(0.2), "runs"].mean()
1.5
我有以下数据集。我想找到较低的 20 个百分位数的平均值 运行。例如: 如果我将 运行s 列分成 5 个批次,那么前两行将位于第 20 个百分位。所以这两行的平均值 运行 将是 (1+2)/2 = 1.5 如何将数据框分成 5 个批次(排序),然后找到该特定组的平均值?
我已尝试使用以下内容,但输出显示 2.8 而不是 3
d.runs.quantile(0.2)
输入:
ODI_runs = {'name': ['Tendulkar', 'Sangakkara', 'Ponting',
'Jayasurya', 'Jayawardene', 'Kohli',
'Haq', 'Kallis', 'Ganguly', 'Dravid'],
'runs': [1,2,3,4,5,6,7,8,9,10]}
d = pd.DataFrame(ODI_runs)
name runs
Tendulkar 1
Sangakkara 2
Ponting 3
Jayasurya 4
Jayawardene 5
Kohli 6
Haq 7
Kallis 8
Ganguly 9
Dravid 10
输出:
1.5
尝试:
>>> df['runs'].sort_values().head(round(0.2*len(df))).mean()
1.5
如果要获取所有结果,请使用pd.cut
:
labels = ['1st', '2nd', '3rd', '4th', '5th']
out = df['runs'].groupby(pd.cut(df['runs'], bins=5, labels=labels)).mean()
print(out)
# Output
runs
1st 1.5
2nd 3.5
3rd 5.5
4th 7.5
5th 9.5
Name: runs, dtype: float64
您可以使用 pandas.DataFrame.quantile
方法:检索分隔我们使用的数据的前 20% 的值 df["runs"].quantile(0.2)
。那么,就是全部 pandas:使用 loc 定位正确的行和列,并计算这些值的 .mean()
:
>> df.loc[df["runs"] <= df["runs"].quantile(0.2), "runs"].mean()
1.5