根据来自另一个数据框的条件创建新的数据框进行循环

时间:2018-08-01 01:51:58

标签: python pandas for-loop dataframe

使用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)

3 个答案:

答案 0 :(得分:2)

IIUC sort_valuesgroupby + 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