亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Multiindex Pandas 系列中獲取每個組中的最大者

在 Multiindex Pandas 系列中獲取每個組中的最大者

RISEBY 2021-12-29 20:09:04
我有一個數據幀,其中包含自 2009 年以來發生的每場 NFL 比賽的信息。我的目標是找出每個賽季哪些球隊擁有最多的“重要比賽”。為了做到這一點,我找到了所有超過 20 碼的比賽,按年份和球隊對它們進行分組,并得到每個組的大小。big_plays = (df[df['yards_gained'] >= 20]             .groupby([df['game_date'].dt.year, 'posteam'])             .size())這導致以下系列:game_date  posteam2009       ARI        55           ATL        51           BAL        55           BUF        37           CAR        52           CHI        58           CIN        51           CLE        31           DAL        68           DEN        42           DET        42           GB         65           HOU        63           IND        67           JAC        51           KC         44           MIA        34           MIN        64           NE         48           NO         72           NYG        69           NYJ        54           OAK        38           PHI        68           PIT        72           SD         71           SEA        45           SF         51           STL        42           TB         51                      ..2018       BAL        44           BUF        55           CAR        64           CHI        66           CIN        69           CLE        70           DAL        51           DEN        59Length: 323, dtype: int64到目前為止,這正是我想要的。但是,我被困在下一步。我想要 MultiIndex 中每個組的 n 個最大值,或者每個賽季“大戲”次數最多的 n 支球隊。我以一種繁瑣的方式半成功地解決了這個任務。如果我groupby是 MultiIndex 的第 0 級,然后nlargest在該 groupby 上運行該函數,則會得到以下結果(為簡潔起見,截斷為前兩年):big_plays.groupby(level=0).nlargest(5)回報game_date  game_date  posteam2009       2009       NO         72                      PIT        72                      SD         71                      NYG        69                      DAL        682010       2010       PHI        81                      NYG        78                      PIT        78                      SD         75                      DEN        73這(相當不雅)解決了問題,但我想知道如何更好地實現或多或少相同的結果。
查看完整描述

1 回答

?
呼啦一陣風

TA貢獻1802條經驗 獲得超6個贊

在我看來,你的代碼是好的,只是受了一點變化group_keys=False在Series.groupby為避免重復多指標的水平:


s = big_plays.groupby(level=0, group_keys=False).nlargest(5)

print (s)

game_date  posteam

2009       NO         72

           PIT        72

           SD         71

           NYG        69

           DAL        68

2018       KC         88

           LA         80

           LAC        77

           TB         73

           CLE        70

Name: a, dtype: int64

df = big_plays.groupby(level=0, group_keys=False).nlargest(5).reset_index(name='count')

print (df)

   game_date posteam  count

0       2009      NO     72

1       2009     PIT     72

2       2009      SD     71

3       2009     NYG     69

4       2009     DAL     68

5       2018      KC     88

6       2018      LA     80

7       2018     LAC     77

8       2018      TB     73

9       2018     CLE     70

替代方案更復雜:


df = (big_plays.reset_index(name='count')

               .sort_values(['game_date','count'], ascending=[True, False])

               .groupby('game_date')

               .head(5))

print (df)

    game_date posteam  count

19       2009      NO     72

24       2009     PIT     72

25       2009      SD     71

20       2009     NYG     69

8        2009     DAL     68

43       2018      KC     88

44       2018      LA     80

45       2018     LAC     77

57       2018      TB     73

35       2018     CLE     70


查看完整回答
反對 回復 2021-12-29
  • 1 回答
  • 0 關注
  • 155 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號