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