计算最低 n 个百分位数的平均值



我有以下数据集。我想找出下百分之二十的平均跑步次数。例如:如果我将runs列划分为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)。然后,is all pandas:使用loc以正确的行和列为目标,并计算这些值的.mean()

>> df.loc[df["runs"] <= df["runs"].quantile(0.2), "runs"].mean()
1.5

相关内容

最新更新