使用 GroupBy

时间:2021-03-05 11:57:09

标签: python pandas pandas-groupby

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

  • play_id - 指特定的游戏

  • position - A 或 B(每个给定的游戏总共有 3 个玩家(行) - A 和 B 的任意组合)

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

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

<头>
play_id 位置
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 位置
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,但我不知道如何使用。

1 个答案:

答案 0 :(得分: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