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

如何聚合Pandas DataFrame列值为两类并转换为分类列

Pandas单列值归并并转为分类列实现方案

你可以按两步完成处理,逻辑非常简单:

  • 对目标列做值映射,将所有大于1的取值统一归为「大于1」类,取值为1的保留为「1」类
  • 将处理后的列转换为Pandas内置的category分类类型,既可以减少内存占用,也能固定分类顺序方便后续统计、可视化

完整可复现代码

import pandas as pd
import numpy as np

# 1. 构造模拟原始数据(匹配多列、col1多取值的场景)
df = pd.DataFrame({
    "col1": [1, 2, 3, 1, 1, 4, 2, 1, 5, 1, 3, 1],
    "col2": ["x", "y", "z", "x", "m", "n", "y", "x", "p", "q", "z", "x"],
    "col3": [0.1, 0.5, 0.3, 0.2, 0.7, 0.9, 0.4, 0.1, 0.8, 0.2, 0.6, 0.3]
})

# 2. 核心处理:值归并
# 逻辑:col1值等于1则标记为"1",其余(大于1的所有值)标记为"大于1"
df["col1"] = np.where(
    df["col1"] == 1,
    "1",
    "大于1"
)

# 3. 转为分类列,可指定分类顺序保证后续排序/统计符合预期
df["col1"] = df["col1"].astype(
    "category",
    categories=["1", "大于1"]  # 固定两个分类的展示顺序
)

结果验证

执行以下代码可以确认处理效果:

# 查看列类型
print(df["col1"].dtype)
# 输出:category

# 查看值分布
print(df["col1"].value_counts())
# 输出:
# 1      7
# 大于1    5
# Name: col1, dtype: int64

可选调整方案

  • 如果原始col1存在小于1的异常值(比如0、负数),可以按需调整判断逻辑:比如先过滤异常行,或者给异常值单独设置分类,修改np.where的判断条件即可
  • 如果不想引入numpy依赖,也可以用Pandas原生方法实现值替换:
    # 取出所有大于1的取值,生成替换映射表
    replace_map = {val: "大于1" for val in df["col1"].unique() if val > 1}
    df["col1"] = df["col1"].replace(replace_map).astype("category")
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 02:15:39