![](/img/trans.png)
[英]How to get the whole row based on a max value from one column in pandas.groupby().max()?
[英]Pandas groupby -- get output value based on max value of another column
我有以下 dataframe:
df = pd.DataFrame({'Animal': ['Falcon', 'Falcon',
'Parrot', 'Parrot'],
'Habitat':['Jungle', 'Jungle',
'Sky', 'Sky'],
'Tmp':['A', 'B', 'C', 'D'],
'Max Speed': [380., 370., 24., 26.]})
>>> df
Animal Habitat Tmp Max Speed
0 Falcon Jungle A 380.0
1 Falcon Jungle B 370.0
2 Parrot Sky C 24.0
3 Parrot Sky D 26.0
我正在嘗試添加額外的列“輸出”,它將根據“動物”和“棲息地”列的分組中“最大速度”列的最大值從“Tmp”中獲取值。
所需的 output:
Animal Habitat Tmp Max Speed Output
0 Falcon Jungle A 380.0 A
1 Falcon Jungle B 370.0 A
2 Parrot Sky C 24.0 D
3 Parrot Sky D 26.0 D
可以使用groupby
,然后將其加入原始數據集中。 但是有沒有更有效的方法來做到這一點? 也許使用transform
或其他東西?
您可以定義一個 function 以pd.dataframe
作為參數:
import pandas as pd
import numpy as np
def fmax(df_):
df_['Output'] = df_.sort_values(['Max Speed']).tail(1)['Tmp'].squeeze()
return df_
請注意使用pandas.DataFrame.squeeze
function 返回標量值。 然后簡單地使用groupby
在 function 之上apply
:
df.groupby(['Animal','Habitat']).apply(fmax)
結果是:
Animal Habitat Tmp Max Speed Output
0 Falcon Jungle A 380.0 A
1 Falcon Jungle B 370.0 A
2 Parrot Sky C 24.0 D
3 Parrot Sky D 26.0 D
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.