首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较熊猫数据中其他列常见的行

比较熊猫数据中其他列常见的行
EN

Stack Overflow用户
提问于 2021-10-28 13:10:20
回答 1查看 47关注 0票数 0

我有以下的运动员参加比赛的数据。

代码语言:javascript
复制
   pos   country       year    round      event       athlete    Battle
   1      Jamaica      2012    100m      Beijing     BOLT         0
   2      Jamaica      2012    100m      Beijing     BLAKE        0
   4       USA         2012    100m      Beijing     GAY          0
   3       USA         2012    100m      Beijing     JOHN         0
   6      Jamaica      2012    200m      Beijing     BOLT         0
   7      Jamaica      2012    200m      Beijing     BLAKE        0
   3       USA         2012    200m      Beijing      GAY         0
   4       USA         2012    200m      Beijing     JOHN         0

我想给‘战斗’列赋值,它表示运动员获得了更高的网格位置。就像这样:

代码语言:javascript
复制
   pos   country      year    round     event       athlete    Battle
   1      Jamaica     2012     100m      Beijing    BOLT         1
   2       Jamaica     2012    100m      Beijing    BLAKE        0
   4       USA         2012    100m      Beijing    GAY          0
   3       USA         2012    100m      Beijing    JOHN         1
   6       Jamaica     2012    200m      Beijing    BOLT         2
   7       Jamaica      2012   200m      Beijing    BLAKE        0
   3       USA         2012    200m      Beijing    GAY          1
   4       USA         2012    200m      Beijing    JOHN         1

博尔特在两场比赛中都比布莱克有更好的位置,所以他在两轮比赛后的battle值将是2,而布雷克的0。盖伊和约翰在其中一场比赛中表现得更好,所以他们的数值是1和1。

如何计算大熊猫中的Battle列?我不知道从哪里开始。我看过其他问题,包括我自己的Assigning value to pandas dataframe values for unique values in another columnCompare values in two different pandas columns,但是这些比较和/或操作跨越了两列,而我想要的结果迫使我考虑多列(year, round, event, country)必须是常见的,并在athlete列中找到唯一的值并进行比较。

我试着用country来隔离运动员,使用df.groupby(['country', 'round', 'pos']).apply(lambda x: x['athlete'])

代码语言:javascript
复制
  country          round    pos      athlete    
   Jamaica         100m      1        BOLT         
                             2        BLAKE   
   USA             100m      4        GAY         
                             3        JOHN     
   Jamaica         200m      6        BOLT         
                             7        BLAKE       
   USA             200m      3        GAY         
                             4        JOHN 

虽然这隔离了重要的信息,但我仍然困惑于如何比较他们的立场。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-28 13:29:31

IIUC,你可以:

  1. groupby国家和地区,并对运动员进行排名,看看他们outperformed.
  2. groupby运动员还有多少人,并把他们的排名相加。--

代码语言:javascript
复制
df["rank"] = df.groupby(["country", "round"])["pos"].transform(pd.Series.rank, ascending=False, method="dense")-1
df["Battle"] = df.groupby("athlete")["rank"].transform(sum)

>>> df.drop("rank", axis=1)

   pos  country  year round    event athlete  Battle
0    1  Jamaica  2012  100m  Beijing    BOLT     2.0
1    2  Jamaica  2012  100m  Beijing   BLAKE     0.0
2    4      USA  2012  100m  Beijing     GAY     1.0
3    3      USA  2012  100m  Beijing    JOHN     1.0
4    6  Jamaica  2012  200m  Beijing    BOLT     2.0
5    7  Jamaica  2012  200m  Beijing   BLAKE     0.0
6    3      USA  2012  200m  Beijing     GAY     1.0
7    4      USA  2012  200m  Beijing    JOHN     1.0
​~~~
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69754686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档