我认为,在这种情况下,这是很好的表现至少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的匹配。但非常感谢你的帮助! –