![](/img/trans.png)
[英]How to select row with max value in column from pandas groupby() groups?
[英]How to get the whole row based on a max value from one column in pandas.groupby().max()?
我想指定我需要獲取整行的最大值,而不是來自多行的不同最大值,在我的示例中,這應該基於“數字”列。 比如這種方式:
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
您可以執行以下操作:
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)
這給出了以下 output:
Number Random
People
Zack 55 0.545400
Merry 3 0.545434
Cross 88 -7.000000
您的代碼中的問題是每列都應用max()
,因此通過使用切片可以避免此問題。
注意問題中預期的output是一個錯誤
你可以試試這樣的 -
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
恕我直言,這是更直接的方法。
df.sort_values('Number').groupby('People').tail(1)
(也許還將您的列名更改為“名稱”)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.