Python,DataFrame,查看每列中最大的10个值

时间:2018-03-07 18:20:21

标签: python list pandas numpy dataframe

这是我的第一个问题;对不起任何错误。

我的数据框如下所示:

           points                                                 
round     0    1    2    3    4    5    6    7    8    9      
id                                                                       
3        0.0  0.0  0.0  0.0  1.0  1.0  1.0  1.0  3.0  2.0     
4        0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     
5        0.0  3.0  7.0 -1.0  0.0  0.0  0.0  0.0  0.0  0.0    
7        0.0  0.0  0.0  1.0  0.0  0.0  0.0  0.0  0.0  0.0    
10       0.0  2.0  7.0 -2.0  1.0 -1.0  0.0  0.0  3.0  0.0  
12       0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
14       0.0  0.0  0.0 -2.0  1.0  1.0  0.0  2.0  5.0  2.0
15       0.0  0.0  0.0  2.0  0.0  0.0  NaN  NaN  NaN  NaN
18       0.0  4.0  4.0  0.0  9.0  2.0  0.0  3.0  1.0  0.0

我需要在每列中找到3个最大值,然后在其ID列表中返回;例如:

round_1 = [5,10,4]

round_2 = [5,10,18] 

等,如果值与第3轮相同:

round_3 = [15,7,3,4,12,18] and etc

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

IIUC,你可以使用nlargest,ps:index就是你的回合

df.apply(lambda x : x.nlargest(3)).stack().groupby(level=1).apply(list)
Out[523]: 
0    [0.0, 0.0, 0.0]
1    [3.0, 2.0, 4.0]
2    [7.0, 7.0, 4.0]
3    [0.0, 1.0, 2.0]
4    [1.0, 1.0, 9.0]
5    [1.0, 1.0, 2.0]
6    [1.0, 0.0, 0.0]
7    [1.0, 2.0, 3.0]
8    [3.0, 3.0, 5.0]
9    [2.0, 0.0, 2.0]
dtype: object

更新

s=df.apply(lambda x : x.nlargest(3)).notnull()
s.mul(s.index.values,axis=0).replace(0,np.nan).stack().astype(int).groupby(level=1).apply(list)
Out[564]: 
0      [3, 4, 5]
1    [5, 10, 18]
2    [5, 10, 18]
3     [3, 7, 15]
4    [3, 10, 18]
5    [3, 14, 18]
6      [3, 4, 5]
7    [3, 14, 18]
8    [3, 10, 14]
9     [3, 4, 14]
dtype: object