使用2017 NFL四分卫数据,希望将每周前10个Qbs放入数据框(以及其余数据)。
qb = {'week': [1, 1, 1, 2, 2, 2], 'qb': ['Rodgers', 'Brady', 'Wilson', 'Rodgers', 'Brady', 'Wilson'], 'pts': [30, 24, 20, 31, 20, 26]}
qb_df = pd.DataFrame(data=qb)
week qb pts
1 Rodgers 30
1 Brady 24
1 Wilson 20
2 Rodgers 31
2 Brady 20
3 Wilson 26
为此,希望将每周的前2名返回到新的数据框中。
week qb pts
1 Rodgers 30
1 Brady 24
2 Rodgers 31
2 Wilson 26
我尝试了一个for循环,该循环可以获取数据,但无法弄清楚将其放入数据帧中
top10_17 = pd.DataFrame()
for i in range(1, 18):
i_17 = qb_2017.loc[qb_2017['Week'] == i].sort_values('FantasyPoints', ascending=False)[:10]
top10_17 = pd.concat(i_17)
NFL赛季17周的使用范围(1,18)
答案 0 :(得分:2)
IIUC sort_values
和groupby
+ head
df.sort_values('pts',ascending=False).groupby('week').head(2).sort_values('week')
Out[49]:
pts qb week
0 30 Rodgers 1
1 24 Brady 1
3 31 Rodgers 2
5 26 Wilson 2
答案 1 :(得分:0)
grouped = qb_df.groupby('week')
print(grouped.head(2))
这假设您的列表已排序,可以使用pandas.sort_values()
答案 2 :(得分:0)
您也可以这样做:
qb_df.set_index('qb').groupby('week')['pts'].nlargest(2)
week qb
1 Rodgers 30
Brady 24
2 Rodgers 31
Wilson 26
Name: pts, dtype: int64
如果格式对于保持不变非常重要:
qb_df.set_index('qb').groupby('week')['pts'].nlargest(2).reset_index()
week qb pts
0 1 Rodgers 30
1 1 Brady 24
2 2 Rodgers 31
3 2 Wilson 26