我有以下数据集。我想找出下百分之二十的平均跑步次数。例如:如果我将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