Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据循环的另一个数据帧的条件创建新的数据帧_Python_Pandas_For Loop_Dataframe - Fatal编程技术网

Python 根据循环的另一个数据帧的条件创建新的数据帧

Python 根据循环的另一个数据帧的条件创建新的数据帧,python,pandas,for-loop,dataframe,Python,Pandas,For Loop,Dataframe,利用2017年NFL四分卫数据,希望将每周排名前10位的QB与其他数据一起放在一个数据框中 为此,我们希望每周将前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

利用2017年NFL四分卫数据,希望将每周排名前10位的QB与其他数据一起放在一个数据框中

为此,我们希望每周将前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)

grouped = qb_df.groupby('week')
print(grouped.head(2))

这假设您的列表已排序,可以使用
pandas.sort_values()

IIUC
sort_values
with
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

您也可以这样做:

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
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