簡體   English   中英

Pandas groupby -- 根據另一列的最大值得到 output 值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM