【问题标题】:How to get the whole row based on a max value from one column in pandas.groupby().max()?如何根据 pandas.groupby().max() 中一列的最大值获取整行?
【发布时间】:2023-03-09 20:37:01
【问题描述】:

我想指定我需要获取整行的最大值,而不是来自多行的不同最大值,在我的示例中,这应该基于“数字”列。比如这样:

import pandas as pd

data = {
    'Number':[12,55,3,2,88,17],
    'People':['Zack','Zack','Merry','Merry','Cross','Cross'],
    'Random':[353,0.5454,0.5454336,32,-7,4]
}

df = pd.DataFrame (data, columns = ['Number','People','Random'])

print(df,'\n')

max_values = df.groupby('People').max()

print(max_values)

结果如下:

   Number People      Random
0      12   Zack  353.000000
1      55   Zack    0.545400
2       3  Merry    0.545434
3       2  Merry   32.000000
4      88  Cross   -7.000000
5      17  Cross    4.000000 

        Number  Random
People                
Cross       88     4.0
Merry        3    32.0
Zack        55   353.0

这是max_values 的预期结果:

        Number  Random
People                
Cross       88    -7.000000
Merry        3    0.545434
Zack        55   353.0

【问题讨论】:

    标签: python pandas dataframe data-science


    【解决方案1】:

    您可以执行以下操作:

    import pandas as pd
    
    data = {
        'Number':[12,55,3,2,88,17],
        'People':['Zack','Zack','Merry','Merry','Cross','Cross'],
        'Random':[353,0.5454,0.5454336,32,-7,4]
    }
    
    df = pd.DataFrame (data, columns = ['Number','People','Random'])
    
    print(df,'\n')
    
    res = df[df.groupby(['People'])['Number'].transform(max) == df['Number']].set_index('People')
    print(res)
    

    它给出以下输出:

            Number    Random
    People                  
    Zack        55  0.545400
    Merry        3  0.545434
    Cross       88 -7.000000
    

    您的代码中的问题是max() 应用于每列,因此通过使用切片可以避免此问题。

    注意预期的输出是问题中的错误

    【讨论】:

      【解决方案2】:

      你可以试试这样的 -

      df['max_number'] = df.groupby(['People'])['Number'].transform(max)
      df[df.Number == df.max_number].drop('max_number', axis=1).set_index('People')
      
               Number Random
      People                  
      Zack        55  0.545400
      Merry        3  0.545434
      Cross       88 -7.000000
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-24
        • 2020-12-08
        • 2015-02-01
        • 1970-01-01
        • 2021-09-12
        • 2013-03-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多