这是我的第一个问题;对不起任何错误。
我的数据框如下所示:
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
感谢您的帮助。
答案 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