Python 如何基于pandas.groupby().max()中一列的最大值获取整行?

Python 如何基于pandas.groupby().max()中一列的最大值获取整行?,python,pandas,dataframe,data-science,Python,Pandas,Dataframe,Data Science,我想指定我需要获得一个最大值的整行,而不是多行的不同最大值,在我的示例中,这应该基于列“Number”。例如: 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

我想指定我需要获得一个最大值的整行,而不是多行的不同最大值,在我的示例中,这应该基于列“Number”。例如:

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)
结果如下:

以下是
最大值的预期结果。


您可以执行以下操作:

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()
应用于每列,因此使用切片可以避免此问题


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

您可以尝试以下方法-

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
        Number    Random
People                  
Zack        55  0.545400
Merry        3  0.545434
Cross       88 -7.000000
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