Pandas Groupby 与 idxmax 并进行变换以获得每组最大索引的值

问题描述 投票:0回答:4

我有以下数据框

       High    FlgVela  
0      177.73      1
1      178.48      2      
2      182.10      2      
3      182.48      3      
4      173.66      4
5      174.40      5
6      172.34      6
7      172.87      6
8      176.36      6

根据 FlgVela 变量获取最大索引值的正确方法是什么,就像下面的数据框一样。

       High    FlgVela  High_ValueIndexMax
0      177.73      1        177.73
1      178.48      2        182.10
2      182.10      2        182.10
3      182.48      3        182.48
4      173.66      4        173.66
5      174.40      5        174.40
6      172.34      6        176.36
7      172.87      6        176.36
8      176.36      6        176.36

我尝试了以下逻辑,但它返回索引,预期结果是索引行的值。

df['High_ValueIndexMax'] = df.groupby(['FlgVela'])['High'].transform('idxmax')

python pandas pandas-groupby transform
4个回答
0
投票

尝试:

df['High_ValueIndexMax'] = df.groupby(['FlgVela'])['High'].transform('max')

输出:

     High  FlgVela  High_ValueIndexMax
0  177.73        1              177.73
1  178.48        2              182.10
2  182.10        2              182.10
3  182.48        3              182.48
4  173.66        4              173.66
5  174.40        5              174.40
6  172.34        6              176.36
7  172.87        6              176.36
8  176.36        6              176.36

0
投票

如果您希望每组中属于

idxmax()
的整行:

>>> df.loc[ df.groupby('FlgVela').idxmax()['High'] ]

     High  FlgVela
0  177.73        1
2  182.10        2
3  182.48        3
4  173.66        4
5  174.40        5
8  176.36        6

0
投票

另一种方式:

idx=df.groupby(['FlgVela'])['High'].transform('idxmax').values

最后:

df['High_ValueIndexMax']=df.loc[idx,'High'].values

df
的输出:

        High    FlgVela     High_ValueIndexMax
0       177.73      1       177.73
1       178.48      2       182.10
2       182.10      2       182.10
3       182.48      3       182.48
4       173.66      4       173.66
5       174.40      5       174.40
6       172.34      6       176.36
7       172.87      6       176.36
8       176.36      6       176.36

0
投票

你可以用这个命令来做到这一点

df["High_ValueIndexMax"] = df["高"].loc[df.groupby("FlgVela")["高"].transform("idxmax")].values

© www.soinside.com 2019 - 2024. All rights reserved.