我認爲,在這種情況下,這是很好的表現至少3輪,以檢查代碼(假設你想要的東西比僅僅2輪更普遍的),所以我會擴大樣本數據:
Dan Mike Dave
0 Adrian Peterson Eddie Lacy Jamaal Charles
1 Calvin Johnson Leveon Bell Dez Bryant
2 Tom Brady Lionel Messi Lebron James
首先,使用stack()
來獲得暫定的訂單。
df2 = df.stack().reset_index().reset_index()
df2.columns = ['Order','Round','Drafter','Player']
Order Round Drafter Player
0 0 0 Dan Adrian Peterson
1 1 0 Mike Eddie Lacy
2 2 0 Dave Jamaal Charles
3 3 1 Dan Calvin Johnson
4 4 1 Mike Leveon Bell
5 5 1 Dave Dez Bryant
6 6 2 Dan Tom Brady
7 7 2 Mike Lionel Messi
8 8 2 Dave Lebron James
注意,爲了爲回合0和2是正確的,但不是1,一種相當簡單的方法來解決的順序爲第1輪是由負1(更具體地所有不被2整除輪)和繁殖然後排序:
df2['Order'] = np.where(df2['Round'].mod(2)==1, -df2['Order'], df2['Order'])
df3 = df2.sort(['Round','Order']).reset_index(drop=True)
Order Round Drafter Player
0 0 0 Dan Adrian Peterson
1 1 0 Mike Eddie Lacy
2 2 0 Dave Jamaal Charles
3 -5 1 Dave Dez Bryant
4 -4 1 Mike Leveon Bell
5 -3 1 Dan Calvin Johnson
6 6 2 Dan Tom Brady
7 7 2 Mike Lionel Messi
8 8 2 Dave Lebron James
此時選秀順序現在正確地索引舉行,您可以刪除訂單列(我只是離開它有使其更明顯的代碼是如何工作)。
謝謝你,這是一個很好的答案!唯一的一點是我希望能保持Drafter與Player的匹配。但非常感謝你的幫助! –