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

如何为Pandas DataFrame添加分组唯一标识列及统计Cat1-Cat2对数量

嘿,针对你提出的两个Pandas操作问题,我来给你详细拆解解决办法,附代码示例和说明:

问题1:为Pandas DataFrame添加分组唯一标识列

如果需要给DataFrame里的每组数据分配一个唯一ID,核心思路是先按指定列(比如你提到的Cat1、Cat2)分组,再给每个分组映射唯一标识。这里有两种常用且高效的方法:

  • 方法一:使用groupby().ngroup()
    这个方法会自动给每个分组分配从0开始的连续整数ID,默认按分组键的排序顺序分配。如果想按分组首次出现的顺序分配ID,加上sort=False即可。

    import pandas as pd
    
    # 先构造一个示例DataFrame
    df = pd.DataFrame({
        "Cat1": ["A", "A", "B", "B", "A", "B"],
        "Cat2": ["X", "X", "Y", "Y", "Z", "X"]
    })
    
    # 添加分组唯一标识列GroupID
    df["GroupID"] = df.groupby(["Cat1", "Cat2"], sort=False).ngroup()
    

    运行后,每个Cat1-Cat2配对的组都会有专属的ID,比如(A,X)是0,(B,Y)是1,(A,Z)是2,(B,X)是3。

  • 方法二:使用factorize()处理分组键
    先把Cat1和Cat2组合成元组作为分组键,再用factorize()生成唯一ID,这种方式也是按分组首次出现的顺序分配ID,非常直观:

    # 生成分组键元组列表
    group_keys = list(zip(df["Cat1"], df["Cat2"]))
    # 生成唯一标识列
    df["GroupID"] = pd.factorize(group_keys)[0]
    
问题2:按升序统计每一组"Cat1"-"Cat2"配对的数量

要统计每个配对的出现次数并按升序排列,有两种简洁的实现方式:

  • 方法一:直接用value_counts()
    value_counts()可以直接对多列组合统计频次,默认是降序排列,只需设置ascending=True就能改成升序,最后用reset_index()把结果转成标准DataFrame格式:

    # 统计配对数量并按升序排列
    count_df = df[["Cat1", "Cat2"]].value_counts(ascending=True).reset_index(name="Count")
    
  • 方法二:groupby() + size() + 排序
    先分组计算每组的大小,再对计数结果进行升序排序,适合需要更灵活控制分组逻辑的场景:

    # 分组统计每组数量
    count_df = df.groupby(["Cat1", "Cat2"]).size().reset_index(name="Count")
    # 按Count列升序排序,同时重置索引
    count_df = count_df.sort_values(by="Count", ascending=True).reset_index(drop=True)
    

    两种方法最终都会得到类似这样的结果(以示例DataFrame为例):

    Cat1Cat2Count
    AZ1
    BX1
    AX2
    BY2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:10:27