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

如何在DataFrame列中实现通用手动分组分段逻辑?

实现DataFrame团队的手动分段分组(每组3个,最后一组可含2个)

实现思路

  1. 先对目标列排序,确保分组按固定顺序生成
  2. 基于排序后的连续索引生成初始分组(每3个团队一组)
  3. 处理特殊场景:当团队总数除以3余1时,调整最后两组为各2个团队,避免出现单组1个的情况
  4. 将分组编号转为直观的命名格式(如"组1""组2")

完整代码

import pandas as pd
import numpy as np

def create_team_groups(df, team_col):
    # 按指定团队列排序并重置索引,保证索引连续
    sorted_df = df.sort_values(by=team_col).reset_index(drop=True)
    total_teams = len(sorted_df)
    
    # 生成初始分组:每3个团队划分为一组
    group_ids = np.arange(total_teams) // 3
    
    # 处理总数除以3余1的情况:调整最后两组为各2个团队
    if total_teams % 3 == 1 and total_teams >= 4:
        group_ids[-2] = group_ids[-1]
    
    # 转换为易读的分组名称
    sorted_df['分组'] = '组' + (group_ids + 1).astype(str)
    return sorted_df

使用示例

假设你有如下测试数据:

# 生成14个团队的测试DataFrame
team_data = pd.DataFrame({'团队名称': [f'团队{i}' for i in range(1, 15)]})

# 调用函数生成分组
grouped_data = create_team_groups(team_data, '团队名称')

# 查看分组分布
print(grouped_data['分组'].value_counts())

输出结果:

组1    3
组2    3
组3    3
组4    3
组5    2
Name: 分组, dtype: int64

代码说明

  • 排序与索引重置:sort_values保证团队按指定列排序,reset_index让索引从0开始连续,为后续分组计算提供基础
  • 初始分组生成:通过np.arange(total_teams) // 3快速生成每3个一组的编号,高效且简洁
  • 特殊情况适配:当团队总数除以3余1且总数≥4时,调整倒数第二个团队的分组编号,让最后两组各含2个团队,避免出现单组1个的不合理情况
  • 分组名称格式化:将数字编号转为"组X"的格式,更符合日常使用习惯

该函数完全通用,无论团队数量如何变化,都能自动适配分组规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:01:06