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

如何将多dataset的不同类别行分组合并为统一类别行?

嘿,这个需求在数据处理场景里太常见啦!不管你是用Python(Pandas)还是直接操作数据库(SQL),都能轻松实现。核心思路就是先统一类别映射,再通过分组聚合把多行合并成单行汇总数据,我给你拆解下具体步骤:

一、用Python Pandas处理(适合本地数据集)

首先你得先定义一个「类别映射规则」,把需要合并的零散类别对应到统一的名称上,比如针对你提到的dataset2:

import pandas as pd

# 定义类别映射字典:把要合并的类别指向统一名称
category_mapping = {
    'Malicious damage to property': 'Criminal damage',
    'Arson': 'Criminal damage',
    # 如果还有其他需要合并的类别,直接在这里加键值对就行
}

# 读取你的dataset2
df2 = pd.read_csv('dataset2.csv')

# 生成统一类别列:有映射的替换成统一名称,没有的保留原类别
df2['unified_category'] = df2['Category'].map(category_mapping).fillna(df2['Category'])

接下来就是分组聚合,把同一统一类别的多行数据合并成单行——具体聚合方式看你需要的「相关信息」是什么:

# 示例:统计每个统一类别的案件数量、总损失金额、平均损失,合并案件描述
aggregated_result = df2.groupby('unified_category').agg(
    total_cases=('Case_ID', 'count'),  # 统计案件总数
    total_loss=('Loss_Amount', 'sum'),  # 统计总损失金额
    avg_loss=('Loss_Amount', 'mean'),  # 统计平均损失
    case_details=('Case_Description', lambda x: ', '.join(x))  # 合并所有案件描述文本
).reset_index()

执行完你就得到了每个统一类别对应的单行汇总数据啦~如果有多个数据集,只要给每个数据集都生成unified_category列,再用pd.concat()合并后聚合就行。

二、用SQL处理(适合数据库中的数据集)

如果你是直接操作数据库里的数据集,用CASE WHEN来实现类别统一,再配合GROUP BY聚合:

SELECT
    -- 先统一类别
    CASE
        WHEN Category IN ('Malicious damage to property', 'Arson') THEN 'Criminal damage'
        -- 其他需要合并的类别继续加WHEN条件
        ELSE Category
    END AS unified_category,
    COUNT(Case_ID) AS total_cases,  -- 统计案件数
    SUM(Loss_Amount) AS total_loss,  -- 统计总损失
    GROUP_CONCAT(Case_Description SEPARATOR ', ') AS case_details  -- 合并案件描述(MySQL语法)
FROM dataset2
GROUP BY unified_category;

如果要同时处理多个数据集,可以先把数据集合并再聚合:

WITH combined_data AS (
    SELECT Category, Case_ID, Loss_Amount, Case_Description FROM dataset1
    UNION ALL
    SELECT Category, Case_ID, Loss_Amount, Case_Description FROM dataset2
)
SELECT
    CASE
        WHEN Category IN ('Malicious damage to property', 'Arson') THEN 'Criminal damage'
        ELSE Category
    END AS unified_category,
    COUNT(Case_ID) AS total_cases,
    SUM(Loss_Amount) AS total_loss
FROM combined_data
GROUP BY unified_category;

小提示

  • 聚合方式完全看你的需求:除了计数、求和,还可以取均值、最值,甚至合并文本内容(比如把所有案件编号拼在一起)。
  • 如果你的「相关信息」是要保留原始行的所有细节但按类别分组展示,Pandas里可以用groupby把行转成列表:df2.groupby('unified_category')['Case_ID'].apply(list).reset_index()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:38:26