【问题标题】:Pandas Groupby with idxmax and transform to get the value of the largest index of each groupPandas Groupby with idxmax and transform 得到每组最大索引的值
【发布时间】:2021-06-06 07:44:50
【问题描述】:

我有以下数据框

       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')

【问题讨论】:

  • 将其设为 'max' 而不是 'idxmax'。
  • 我不明白 "但是它返回索引并且预期的结果是索引行的(整个?)值。" 所以在每个组中,你想要a) 与.idxmax() 相关的整行? b)只是最大值? (在这种情况下,只需使用.max() c)还是什么?

标签: python pandas pandas-groupby transform


【解决方案1】:

试一试:

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

【讨论】:

    【解决方案2】:

    如果您想要在每个组中与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
    

    【讨论】:

      【解决方案3】:

      另一种方式:

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-23
        • 2017-02-05
        • 1970-01-01
        • 1970-01-01
        • 2018-11-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多