代码之家  ›  专栏  ›  技术社区  ›  Ahmad

熊猫:选择前n组

  •  0
  • Ahmad  · 技术社区  · 2 年前

    假设我有一个数据帧

    a   b
    i1  t1
    i1  t2
    i2  t3
    i2  t1
    i2  t3
    i3  t2
    

    我想按“a”对df进行分组,然后选择两个最大的组。我特别想要得到的行数

    a   b
    i2  t3
    i2  t1
    i2  t3
    i1  t1
    i1  t2
    

    我试过:

    df.groupby("a").head(2)   
    

    但似乎每组选择两行

    1 回复  |  直到 2 年前
        1
  •  2
  •   Panda Kim    2 年前

    实例

    data = {'a': {0: 'i1', 1: 'i1', 2: 'i2', 3: 'i2', 4: 'i2', 5: 'i3'},
            'b': {0: 't1', 1: 't2', 2: 't3', 3: 't1', 4: 't3', 5: 't2'}}
    df = pd.DataFrame(data)
    

    密码

    lst = df['a'].value_counts()[:2].index
    out = df[df['a'].isin(lst)]
    

    out

         a  b
    0   i1  t1
    1   i1  t2
    2   i2  t3
    3   i2  t1
    4   i2  t3
    

    如果你想按数量排序。使用以下代码

    lst = df['a'].value_counts()[:2].index
    m = pd.Series(range(0, 2), index=lst)
    out = df[df['a'].isin(lst)].sort_values('a', key=lambda x: m[x])
    

    出来

        a   b
    2   i2  t3
    3   i2  t1
    4   i2  t3
    0   i1  t1
    1   i1  t2