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

在Pandas中按国家-团队分组并按颜色规则连续编号

解决方案

核心思路是利用Pandas的有序分类类型保证Color的自定义排序,再结合分组后的rank(method='dense')实现连续编号逻辑。以下是具体步骤:

1. 确认基础步骤(匹配你已完成的操作)

先按ID字母排序,并将Color列转为指定顺序的有序分类:

import pandas as pd

# 替换为你的实际数据
data = {
    'ID': ['B1', 'A2', 'C3', 'D4', 'E5', 'F6', 'G7', 'H8'],
    'Country': ['USA', 'USA', 'USA', 'Canada', 'Canada', 'Canada', 'Mexico', 'Mexico'],
    'Team': ['Red', 'Blue', 'Red', 'Green', 'Yellow', 'Green', 'Purple', 'Orange'],
    'Color': ['Blue', 'Red', 'Blue', 'Yellow', 'Green', 'Yellow', 'Orange', 'Orange']
}
df = pd.DataFrame(data)

# 你的自定义Color顺序
colorcode = ['Red', 'Blue', 'Green', 'Yellow', 'Orange', 'Purple']

# 按ID字母排序
df = df.sort_values('ID').reset_index(drop=True)

# 将Color转为有序分类,确保排序遵循你定义的colorcode
df['Color'] = pd.Categorical(df['Color'], categories=colorcode, ordered=True)

2. 生成Result列

通过分组+稠密排名直接实现需求:

# 按Country分组,对Color进行稠密排名——相同Color同编号、连续递增、换Country重置
df['Result'] = df.groupby('Country')['Color'].rank(method='dense', ascending=True).astype(int)

逻辑说明

  • 有序分类:将Color转为pd.Categorical并指定categories=colorcode,确保排名时严格遵循你定义的Color顺序,而非默认的字母顺序。
  • 稠密排名(dense):rank(method='dense')会为相同的Color分配相同编号,且编号连续不跳过(比如1、2、2、3,而非1、2、2、4),完美匹配"同一Color编号相同、同一国家内编号不重置"的要求。
  • 分组重置:groupby('Country')保证每个国家内的编号独立计算,切换到新Country时编号自动从1重新开始。

示例输出

执行上述代码后,最终DataFrame如下:

IDCountryTeamColorResult
A2USABlueRed1
B1USARedBlue2
C3USARedBlue2
D4CanadaGreenYellow2
E5CanadaYellowGreen1
F6CanadaGreenYellow2
G7MexicoPurpleOrange1
H8MexicoOrangeOrange1

完全符合你要求的所有规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 02:28:09