【问题标题】:Pandas manipulation with GroupBy使用 GroupBy 操作 Pandas
【发布时间】:2021-03-05 11:57:09
【问题描述】:

我有一个非常大的数据表,其中包含 play_idpositionframe 列。

  • play_id - 指特定的戏剧

  • position - A 或 B(每场比赛共有 3 名玩家(行) - As 和 B 的任意组合)

  • frame - 时间范围(例如,想象每 1 秒冻结一次)

以下显示示例数据(为清楚起见进行了简化):

play_id position frame
1 A 1
1 A 1
1 B 1
1 A 2
1 A 2
1 B 2
2 A 1
2 B 1
2 B 1
2 A 2
2 B 2
2 B 2

我想为每个 play_id 计算每个位置的玩家数量(对于给定的 play_id,它们在帧之间是一致的)并在每个位置附加一个数字以使它们独一无二。

这将导致以下结果:

play_id position frame
1 A_1 1
1 A_2 1
1 B_1 1
1 A_1 2
1 A_2 2
1 B_1 2
2 A_1 1
2 B_1 1
2 B_2 1
2 A_1 2
2 B_1 2
2 B_2 2

实际上,我有 7 个不同的位置、25 个帧和大约 500,000 个 play_id(以及更多列)。

我怎样才能以有效的方式实现这一目标?我认为应该使用groupby,但我不知道如何使用。

【问题讨论】:

    标签: python pandas pandas-groupby


    【解决方案1】:

    您可以groupby.cumcount,按所有列分组并为位置添加计数:

    df['position'] = df.position.str.cat(df.groupby(['play_id','frame','position']).position
                                           .cumcount().add(1).astype(str), 
                                         sep='_')
    
    print(df)
    
        play_id position  frame
    0         1      A_1      1
    1         1      A_2      1
    2         1      B_1      1
    3         1      A_1      2
    4         1      A_2      2
    5         1      B_1      2
    6         2      A_1      1
    7         2      B_1      1
    8         2      B_2      1
    9         2      A_1      2
    10        2      B_1      2
    11        2      B_2      2
    

    【讨论】:

      猜你喜欢
      • 2017-12-19
      • 2020-04-26
      • 2021-11-07
      • 2014-06-28
      • 2018-02-24
      • 2018-02-01
      • 2017-01-02
      • 2020-09-02
      • 2021-12-27
      相关资源
      最近更新 更多