【问题标题】:Identify which country won the most gold, in each olympic games确定在每届奥运会上哪个国家赢得最多金牌
【发布时间】:2022-11-10 15:52:28
【问题描述】:

当我在熊猫中编写以下代码时

gold.groupby(['Games','country'])['Medal'].value_counts()

我得到以下结果,如何提取每场比赛的最高奖牌获得者,结果应该是所有比赛,奖牌最多的国家,奖牌总数

Games        country     Medal
1896 Summer  Australia   Gold       2
             Austria     Gold       2
             Denmark     Gold       1
             France      Gold       5
             Germany     Gold      25
                                 ... 
2016 Summer  UK          Gold      64
             USA         Gold     139
             Ukraine     Gold       2
             Uzbekistan  Gold       4
             Vietnam     Gold       1
Name: Medal, Length: 1101, dtype: int64

    ID  Name    Sex Age Height  Weight  Team    NOC Games   Year    Season  City    Sport   Event   Medal   country notes
68  17294   Cai Yalin   M   23.0    174.0   60.0    China   CHN 2000 Summer 2000    Summer  Sydney  Shooting    Shooting Men's Air Rifle, 10 metres Gold    China   NaN
77  17299   Cai Yun M   32.0    181.0   68.0    China-1 CHN 2012 Summer 2012    Summer  London  Badminton   Badminton Men's Doubles Gold    China   NaN
87  17995   Cao Lei F   24.0    168.0   75.0    China   CHN 2008 Summer 2008    Summer  Beijing Weightlifting   Weightlifting Women's Heavyweight   Gold    China   NaN
104 18005   Cao Yuan    M   17.0    160.0   42.0    China   CHN 2012 Summer 2012    Summer  London  Diving  Diving Men's Synchronized Platform  Gold    China   NaN
105 18005   Cao Yuan    M   21.0    160.0   42.0    China   CHN 2016 Summer 2016    Summer  Rio de Janeiro  Diving  Diving Men's Springboard    Gold    China   NaN

【问题讨论】:

  • 给出一个示例数据框,最好是在此处轻松加载的文本格式。

标签: python pandas


【解决方案1】:

数据 你的数据只包括中国金牌得主,所以我加了一行:

  ID             Name Sex   Age  Height  Weight     Team  NOC  
0   17294        Cai Yalin   M  23.0   174.0    60.0    China  CHN   
1   17299          Cai Yun   M  32.0   181.0    68.0  China-1  CHN   
2   17995          Cao Lei   F  24.0   168.0    75.0    China  CHN   
3   18005         Cao Yuan   M  17.0   160.0    42.0    China  CHN   
4   18005         Cao Yuan   M  21.0   160.0    42.0    China  CHN   
5  292929  Serge de Gosson   M  52.0   178.0    69.0   France   FR   

         Games  Year  Season            City          Sport  
0  2000 Summer  2000  Summer          Sydney       Shooting   
1  2012 Summer  2012  Summer          London      Badminton   
2  2008 Summer  2008  Summer         Beijing  Weightlifting   
3  2012 Summer  2012  Summer          London         Diving   
4  2016 Summer  2016  Summer  Rio de Janeiro         Diving   
5  2022 Summer  2022  Summer       Stockholm   Calisthenics   

                                 Event Medal country  notes  
0  Shooting Men's Air Rifle, 10 metres  Gold   China    NaN  
1              Badminton Men's Doubles  Gold   China    NaN  
2    Weightlifting Women's Heavyweight  Gold   China    NaN  
3   Diving Men's Synchronized Platform  Gold   China    NaN  
4             Diving Men's Springboard  Gold   China    NaN  
5                              Planche  Gold  France    NaN  

您想要准确地定义您所做的,但对数据进行排序并保留第一行:

gold.groupby(['Games','country'])['Medal'].value_counts().groupby(level=0, group_keys=False).head(1)

返回:

Games        country  Medal
2000 Summer  China    Gold     1
2008 Summer  China    Gold     1
2012 Summer  China    Gold     2
2016 Summer  China    Gold     1
2022 Summer  France   Gold     1
Name: Medal, dtype: int64

或作为数据框:

GOLD_TOP = pd.DataFrame(gold.groupby(['Games','country'])['Medal'].value_counts().groupby(level=0, group_keys=False).head(1))

【讨论】:

    【解决方案2】:
    df_gold = df[df["Medal"]=="Gold"].groupby("Team").Medal.count().reset_index()
    df_gold = df_gold.sort_values(by="Medal",ascending=False)[:8]
    df_gold
    

    【讨论】:

      猜你喜欢
      • 2023-01-26
      • 2023-03-19
      • 2016-12-11
      • 1970-01-01
      • 2017-09-28
      • 2021-06-24
      • 1970-01-01
      • 2017-02-16
      • 2012-01-13
      相关资源
      最近更新 更多