如何获取列中的某些数据?

2024-05-12 16:14:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个表,并通过一个名为“passer\u player\u name”的变量将其分组

data.loc[(data['play_type'] == 'pass') & (data['down'] <= 4)].groupby(by='passer_player_name')[['epa']].mean()
passer_index = data.loc[(data['play_type'] == 'pass') & (data['down'] <= 4)].groupby(by='passer_player_name')[['epa', 'success','yards_gained']].mean()
passer_index['attempts'] = data.loc[(data['play_type'] == 'pass') & (data['down'] <= 4)].groupby(by='passer_player_name')['epa'].count()

这给出了以下输出(几个示例行):

                      epa  success  yards_gained  attempts
passer_player_name      
L.Jackson           0.336     0.48           6.9       335
K.Cousins           0.295     0.50           7.1       363
P.Mahomes           0.285     0.50           7.4       368

我接下来要做的是使用“passer\u player\u name”列抓取/排序我的表,但是从技术上讲,这不是表的一部分。我试着做了以下工作:

passer_index['team_names'] = data.loc[(data['play_type'] == 'pass') & (data['down'] <= 4)].groupby(by='passer_player_name').posteam

不幸的是,这在添加的“团队名称”列中给出了以下内容(这是一个示例行):

(L.Jackson, [BAL, BAL, BAL, BAL, BAL, BAL, BAL...

我怎样才能得到一个只写一次团队名称的列,比如一个只输出“BAL”的列(每个玩家的团队显然不同)?你知道吗

因为我显然无法显示整个数据集以及数据来自何处,所以我的问题基本上是:

我怎么能从这句台词中得知:

(L.Jackson, [BAL, BAL, BAL, BAL, BAL, BAL, BAL...

只是写着“BAL”的一行?我如何从这个系列/序列/任何东西中提取数据?你知道吗


Tags: nameplaydataindexbytypepassloc
1条回答
网友
1楼 · 发布于 2024-05-12 16:14:22

为团队名称创建一个映射,如下所示:

r = {'K.Murray': 'ARI',
 'M.Ryan': 'ATL',
 'L.Jackson': 'BAL',
 'J.Allen': 'BUF',
 'K.Allen': 'CAR',
 'M.Trubisky': 'CHI',
 'A.Dalton': 'CIN',
 'B.Mayfield': 'CLE',
 'D.Prescott': 'DAL',
 'D.Lock': 'DEN',
 'D.Blough': 'DET',
 'A.Rodgers': 'GRE',
 'D.Watson': 'HOU',
 'J.Brissett': 'IND',
 'N.Foles': 'JAC',
 'P.Mahomes': 'KAN',
 'P.Rivers': 'LOS',
 'J.Goff': 'LOS',
 'R.Fitzpatrick': 'MIA',
 'K.Cousins': 'MIN',
 'T.Brady': 'NEP',
 'D.Brees': 'NOS',
 'D.Jones': 'NYG',
 'S.Darnold': 'NYJ',
 'D.Carr': 'OAK',
 'C.Wentz': 'PHI',
 'D.Hodges': 'PIT',
 'J.Garoppolo': 'SAN',
 'R.Wilson': 'SEA',
 'J.Winston': 'TAM',
 'R.Tannehill': 'TEN',
 'D.Haskins': 'WAS'}

然后可以这样合并:

data['team_names'] = data.index.map(r)

输出:

                      epa  success  yards_gained  attempts team_names
passer_player_name                                                        
L.Jackson           0.336     0.48           6.9       335        BAL
K.Cousins           0.295     0.50           7.1       363        MIN
P.Mahomes           0.285     0.50           7.4       368        KCC

我写了一个html scraper,建议我可以修改它来帮助您,它从https://fantasyfootballers.org/rb-running-back-nfl-stats/中获取所有快速的信息。只要#Look for table部分有正确的“table”索引,就可以刮除站点上的任何表,因为通常在要获取的数据之前有几个表,所以可以在其他站点上尝试。我用它从维基百科上为你得到了QB,行必须是table=汤。全部找到('表')[0]

import requests
import csv, re
from bs4 import BeautifulSoup

#Main function
def getNFLContent(link, filename):
    #Request content
    result1 = requests.get(link)

    #Save source in var
    src1 = result1.content

    #Activate soup
    soup = BeautifulSoup(src1,'lxml')

    #Look for table
    table = soup.find_all('table')[1]

    #Save in csv
    with open(filename,'w',newline='') as f:
        writer = csv.writer(f)
        for tr in table('tr'):
            #print(tr)
            row = [t.get_text(strip=True)for t in tr(['td','th'])]
            writer.writerow(row)


def abrvname(x):
   initial = x[0].capitalize()
   lnamepat = r'(\w*?$)'
   lname = re.search(lnamepat, x).groups()[0]
   return initial + '.' + lname

link = 'https://fantasyfootballers.org/rb-running-back-nfl-stats/'
filename='rbs.csv'
getNFLContent(link, filename)
df = pd.read_csv('rbs.csv')
df.insert(loc=1, column='abr_name', value=df.Name.apply(abrvname)) 

相关问题 更多 >