【问题标题】:Find average of categorical values in Pandas with groupby of more than two columns在具有两列以上 groupby 的 Pandas 中查找分类值的平均值
【发布时间】:2021-03-25 21:00:46
【问题描述】:

我有一个 df:

player_id   action  level
    1   miss    level_1
    1   kill    level_1
    1   miss    level_1
    1   miss    level_1
    1   miss    level_1
    1   miss    level_2
    2   miss    level_3
    2   miss    level_3
    2   kill    level_3
    3   miss    level_3

如何计算每个级别中每位用户的平均击杀数?我已经试过了:

d = df.groupby(['level', 'player_id', 'action']).level.count()

这给了我一个熊猫系列:

level   player_id  action
level_1    1       kill     1
                   miss     4
level_2    1       miss     1
level_3    2       kill     1
                   miss     2
           3       miss     1

我只想进一步了解每个级别每个玩家的平均击杀数。最终的 df 应该是这样的:

level      average_kills
level_1    0.2
level_2    0
level_3    0.1667

【问题讨论】:

  • d.xs('kill', level=2).sum(level=0)/d.sum(level=0)

标签: python-3.x pandas dataframe pandas-groupby


【解决方案1】:

试试:

df.action.eq('kill').groupby([df.level, df.player_id]).mean().mean(level=0)

level
level_1    0.200000
level_2    0.000000
level_3    0.166667
Name: action, dtype: float64

【讨论】:

    【解决方案2】:

    从初始数据帧中,您可以groupbyvalue_counts 然后unstack 以确保每个玩过关卡的玩家都有killmiss。然后逐级取平均值。

    res = (df.groupby(['player_id', 'level'])
              ['action'].value_counts(normalize=True)
              .unstack(-1).fillna(0)
              ['kill'].mean(level='level'))
    
    level
    level_1    0.200000
    level_2    0.000000
    level_3    0.166667
    Name: kill, dtype: float64
    

    【讨论】:

      猜你喜欢
      • 2020-07-07
      • 1970-01-01
      • 1970-01-01
      • 2021-10-20
      • 2022-01-24
      相关资源
      最近更新 更多