【问题标题】:how to remain max column in groupby table?如何在 groupby 表中保留最大列?
【发布时间】:2021-07-03 00:14:01
【问题描述】:

我使用 pandas groupby 函数制作了如下汇总表

I II
A apple 3
banana 4
B dog 1
cat 2
C seoul 9
tokyo 5

如果 II 列在每个类别中都有最大值,我想保留。 例如,在 A 类别中,我只想保留香蕉行,因为它在 II 列中具有最大值。 我想要得到的结果表如下所示。

I II
A banana 4
B cat 2
C seoul 9

谢谢。

【问题讨论】:

    标签: python-3.x pandas pandas-groupby


    【解决方案1】:

    我使用的数据框:

    df=pd.DataFrame({'II': {('A', 'apple'): 3,
      ('A', 'banana'): 4,
      ('B', 'dog'): 1,
      ('B', 'cat'): 2,
      ('C', 'seoul'): 9,
      ('C', 'tokyo'): 5}})
    

    通过sort_values()reset_index()drop_duplicates() 尝试:

    out=(df.sort_values('II',ascending=False)
       .reset_index()
       .drop_duplicates('level_0')
       .set_index('level_0')
       .rename_axis(index=None)
       .rename(columns={'level_1':'I'}))
    

    out=(df.reset_index()
           .sort_values('II',ascending=False)
           .groupby('level_0')
           .first()
           .rename(columns={'level_1':'I'})
           .rename_axis(index=None))
    

    out的输出:

        I       II
    C   seoul   9
    A   banana  4
    B   cat     2
    

    【讨论】:

    • 感谢您的回复。但是它对我不起作用。你能解释一下'level_0'的作用是什么吗?
    • 谢谢。我用你的回答解决了我的问题。 out=df.sort_values('II',ascending=False).reset_index().drop_duplicates(subset='category') * 我将索引列名称设为'category
    • @JihoonSeo 更新了答案....请看一下:)
    • @JihoonSeo 当您在 MultiIndexed Dataframe 上使用 reset_index() 时,它的连续级别变为列,它们根据它们的级别命名..所以这里 'level_0' 是分配给第 0 级的列名多指数
    • 好的,现在我明白“level_0”的作用是什么了。谢谢你的热情回复:)
    【解决方案2】:

    不确定这是否是最优雅的解决方案,但如果您希望这应该与 groupby 对象一起使用。

    # Creating the Dummy DataFrame
    d = {
    'Letter': ['A', 'A', 'B', 'B', 'C', 'C'], 'Word': ['apple', 'banana', 
        'dog', 'cat', 'seoul', 'tokyo'], 'II': [3, 4, 1, 2, 9, 5]
    }
    df = pd.DataFrame(data=d)
    
    df_max = df.groupby('Letter')[['II']].agg('max')
    
    df_max = df_max.merge(df, how='left', on='II') # merge the "Word" column back into df_max
    

    如果您需要将列按特定顺序排列,您可以重新排序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-04
      • 1970-01-01
      • 2018-07-24
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      • 2021-11-01
      • 1970-01-01
      相关资源
      最近更新 更多