如何找到熊猫数据帧中每一行N
单元中最佳n
的平均值?
请看下面的数据框,我想找出6分中最好的4分的平均值(n=4,N=6):
df = pd.DataFrame({'stu1' : [17,19,12,17,13,13],
'stu2' : [20,18,15,17,15,0],
'stu3' : [16,19,0,16,0,0],
'stu4' : [0,0,0,0,0,0],
'stu5' : [0,8,14,0,7,9]},
index = 'q1 q2 q3 q4 q5 q6'.split()).T
st1
的最佳4的平均值将基于以下值: 17、19、17、13和16.50。对于st3
,is将基于16、19、0、16,结果为12.75。
如何计算所有行的这个值?
发布于 2019-06-20 23:18:12
鲁比克立方体
df.stack().sort_values().groupby(level=0).tail(4).mean(level=0)
stu4 0.00
stu3 12.75
stu5 9.50
stu1 16.50
stu2 17.50
dtype: float64
发布于 2019-06-20 23:21:46
您可以对每行的列进行排序,然后只需通过切片即可获得最佳的4列。从那里开始,计算平均值很简单:
np.sort(df)[:,-4:].mean(axis=1)
# array([16.5 , 17.5 , 12.75, 0. , 9.5 ])
pd.Series(np.sort(df)[:,-4:].mean(axis=1), index=df.index)
stu1 16.50
stu2 17.50
stu3 12.75
stu4 0.00
stu5 9.50
dtype: float64
发布于 2019-06-20 23:53:03
只需使用np.partition
添加选项即可。如果你的数据很大,np.partition
比np.sort
更好。
np.partition(df, len(df)-4)[:,-4:].mean(-1)
Out[1230]: array([16.5 , 17.5 , 12.75, 0. , 9.5 ])
https://stackoverflow.com/questions/56694948
复制相似问题