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

如何按Period、Group分组将PlayerID升序拼接为新列Unique_GroupID

实现方案

你要的逻辑用pandas可以非常方便实现,核心是按周期+分组聚合后把组ID映射回每一行,两种常用写法按需选择即可。

写法1:简洁版(适合绝大多数场景)

代码最短,不需要额外合并表,直接用groupby+transform一步生成新列:

import pandas as pd

# 一步生成Unique_GroupID列
df['Unique_GroupID'] = df.groupby(['Period', 'Group'])['PlayerID']\
    .transform(lambda group: '-'.join(sorted(group)))

逻辑说明:

  • 以Period、Group两个字段为分组键,精准圈定每个周期下的每个玩家组
  • 对每个组内的PlayerID做升序排序,彻底消除组内玩家行顺序不同带来的ID差异,保证只要是完全相同的5个玩家,不管行顺序怎么排都生成完全一致的ID
  • 用短横线拼接排序后的ID字符串,通过transform直接把组级结果填充到组内每一行,输出和你给出的示例效果完全匹配

写法2:性能优化版(适合10万行以上的大数据集)

如果数据量很大,写法1里的lambda逐组调用会有性能损耗,用全局排序+聚合关联的方式速度快30%以上:

# 先按周期、分组、玩家ID全局排序,分组时不需要重复排序
sorted_df = df.sort_values(by=['Period', 'Group', 'PlayerID'])
# 聚合生成每个组对应的唯一ID
group_lookup = sorted_df.groupby(['Period', 'Group'])['PlayerID']\
    .agg('-'.join)\
    .reset_index(name='Unique_GroupID')
# 把组ID关联回原表
df = df.merge(group_lookup, on=['Period', 'Group'], how='left')

小提示:后续要验证玩家是否曾同组,直接筛选Unique_GroupID中同时包含对应玩家ID的记录即可,不需要再做重复分组计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 12:03:25