根据另一列的最大值获取输出值

2024-10-05 12:26:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据帧:

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

我试图添加额外的列“Output”,该列将根据列“Max Speed”的最大值从“Tmp”中获取值,该列由列“Animal”和“Habitat”组成

期望输出:

   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或其他什么


Tags: 数据dataframedfoutputtmpmaxpdparrot
1条回答
网友
1楼 · 发布于 2024-10-05 12:26:33

您可以定义以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函数返回标量值。 然后使用groupby简单地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

相关问题 更多 >

    热门问题