You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用pandas实现按场次分组行,满足单球场单场次的分组规则?

按“单球场单场次仅一场比赛”逻辑用pandas.groupby()分组的实现方法

原始数据集

import pandas as pd

df = pd.DataFrame({
    'match_id': [50311513, 50313011, 50313009, 50317691, 50315247, 50318597, 50318877, 50318983, 50318831, 50318595],
    'court': [1, 2, 2, 1, 2, 1, 1, 1, 1, 1]
})

需求说明:数据集包含2个球场,需按“场次(slot)”分组,规则为:

  • 第一组包含赛事50311513(球场1)和50313011(球场2)
  • 第二组包含赛事50313009(球场2)和50317691(球场1)
  • 第三组及之后的分组各仅含单行数据

核心逻辑是每个球场每场仅能进行一场比赛,需用pandas.groupby()实现该分组。


补充输入数据集

df2 = pd.DataFrame({
    'match_id': [46768193, 46768193, 46768187, 46768187, 46767821],
    'court': [1, 1, 2, 2, 3],
    'group': [0, 1, 0, 1, 0]
})

实现方案

思路核心

给每个球场的比赛按顺序分配场次序号,相同序号的比赛即为同一时间段的场次,以此作为分组键即可满足“单球场单场次仅一场比赛”的逻辑。

针对第一个数据集的代码实现

# 按球场分组,给每个球场内的比赛分配递增的场次序号(从0开始计数)
df['slot'] = df.groupby('court').cumcount()
# 按场次序号分组
grouped = df.groupby('slot')

# 查看分组结果
for slot_num, group_data in grouped:
    print(f"场次 {slot_num + 1}:")
    print(group_data[['match_id', 'court']])
    print("---")

输出结果完全符合需求:

场次 1:
   match_id  court
0  50311513      1
1  50313011      2
---
场次 2:
   match_id  court
2  50313009      2
3  50317691      1
---
场次 3:
   match_id  court
4  50315247      2
5  50318597      1
---
场次 4:
   match_id  court
6  50318877      1
---
场次 5:
   match_id  court
7  50318983      1
---
场次 6:
   match_id  court
8  50318831      1
---
场次 7:
   match_id  court
9  50318595      1
---

针对补充数据集的代码实现

如果已有group列标识球场内的分组,可直接用该列作为分组键:

# 按现有group列分组
grouped2 = df2.groupby('group')

# 查看分组结果
for group_num, group_data in grouped2:
    print(f"分组 {group_num}:")
    print(group_data)
    print("---")

输出:

分组 0:
     match_id  court  group
0    46768193      1     0
2    46768187      2     0
4    46767821      3     0
---
分组 1:
     match_id  court  group
1    46768193      1     1
3    46768187      2     1
---

若需要重新生成场次序号,同样用cumcount()方法:

df2['slot'] = df2.groupby('court').cumcount()
grouped2 = df2.groupby('slot')

关键说明

  • groupby('court').cumcount()会为每个球场内的行从0开始计数,该计数即为对应球场的场次序号
  • 相同场次序号的行,对应所有球场在同一时间段的比赛,完美匹配“每个球场每场仅一场比赛”的分组逻辑

内容的提问来源于stack exchange,提问作者HJA24

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 15:47:38