代码之家  ›  专栏  ›  技术社区  ›  cs95 abhishek58g

groupby在有序分类列上的奇怪行为

  •  13
  • cs95 abhishek58g  · 技术社区  · 7 年前

    MCVE

    df = pd.DataFrame({
        'Cat': ['SF', 'W', 'F', 'R64', 'SF', 'F'], 
        'ID': [1, 1, 1, 2, 2, 2]
    })
    
    df.Cat = pd.Categorical(
        df.Cat, categories=['R64', 'SF', 'F', 'W'], ordered=True)
    

    如您所见,我已经在上定义了一个有序的分类列 Cat . 核实、核对;

    0     SF
    1      W
    2      F
    3    R64
    4     SF
    5      F
    Name: Cat, dtype: category
    Categories (4, object): [R64 < SF < F < W]
    

    我想找到每个ID的最大类别。正在执行 groupby max

    df.groupby('ID').Cat.max()
    
    ID
    1    W
    2    F
    Name: Cat, dtype: object
    

    as_index=False .

    df.groupby('ID', as_index=False).Cat.max()
    
       ID Cat
    0   1   W
    1   2  SF
    

    词典编纂 . 有人能解释这是否是故意的行为吗?还是这是一只虫子?

    注意,对于此问题,解决方法是 df.groupby('ID').Cat.max().reset_index()

    注意,

    >>> pd.__version__
    '0.22.0'
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   firelynx    6 年前

    这不是故意的行为,这是一个bug。

    Source diving 显示标志执行两个完全不同的操作。一个简单地忽略了石斑鱼的等级和名称,它只是用一个新的范围索引获取值。另一个显然保存着它们。