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

Pandas DataFrame列分类:混合格式大学排名的分类处理问题

解决DataFrame中混合格式大学排名的归类问题

这问题我之前处理过类似的,用Pandas就能轻松搞定。核心思路是先统一处理每个排名值(不管是数字还是范围字符串),再精准映射到你需要的目标区间,具体步骤如下:

1. 定义目标区间的映射规则

先把你要求的16个目标区间整理成一个便于判断的结构,每个元组包含区间的起始值、结束值和最终要显示的区间名称:

import pandas as pd

# 定义目标区间规则:(起始值, 结束值, 目标区间名称)
rank_bins = [
    (1, 10, "1-10"),
    (11, 20, "11-20"),
    (21, 30, "21-30"),
    (31, 40, "31-40"),
    (41, 50, "41-50"),
    (51, 60, "51-60"),
    (61, 70, "61-70"),
    (71, 80, "71-80"),
    (81, 90, "81-90"),
    (91, 100, "91-100"),
    (101, 150, "101-150"),
    (151, 200, "151-200"),
    (201, 300, "201-300"),
    (301, 400, "301-400"),
    (401, 500, "401-500"),
    (501, float("inf"), ">500")
]

2. 编写自定义处理函数

写一个函数来处理单个排名值,覆盖所有可能的格式情况(数字、范围字符串、>500):

def map_rank_to_bin(rank):
    # 直接匹配>500的情况
    if rank == ">500":
        return ">500"
    # 处理已经是范围格式的排名(比如101-150),直接返回原字符串即可
    if "-" in str(rank):
        return str(rank)
    # 处理单个数字格式的排名,转成整数后匹配对应区间
    try:
        rank_num = int(rank)
        for start, end, bin_name in rank_bins:
            if start <= rank_num <= end:
                return bin_name
    except ValueError:
        # 遇到异常格式(比如空值、乱码)时返回默认值,可根据需求修改
        return "未知"

3. 应用函数生成新列

假设你的DataFrame名为df,直接用apply函数生成新的归类列:

# 先构造你的示例数据
data = {"Uni_Rank": ["1", "3", "4", "101-150", "20", "22", "151-200", "201-300", "301-400", "10", "15", "44", "53", "70", ">500"]}
df = pd.DataFrame(data)

# 生成新的归类列Rank_Category
df["Rank_Category"] = df["Uni_Rank"].apply(map_rank_to_bin)

# 查看结果
print(df)

验证结果

运行后会得到符合预期的输出:

Uni_Rank Rank_Category
0         1          1-10
1         3          1-10
2         4          1-10
3   101-150      101-150
4        20         11-20
5        22         21-30
6   151-200      151-200
7   201-300      201-300
8   301-400      301-400
9        10          1-10
10       15         11-20
11       44         41-50
12       53         51-60
13       70         61-70
14     >500         >500

额外优化建议

  • 如果你的Uni_Rank列是混合类型(部分是int,部分是str),函数里的str(rank)会自动兼容,无需额外转换
  • 若数据量极大,apply的效率可能不够,可以改用pd.cut结合预处理逻辑,但对于绝大多数场景,apply已经足够简洁好用
  • 可以根据实际需求修改异常值的返回结果,比如改成空值或者其他标识

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:10:17