【问题标题】:Selecting maximum and minimum values after performing a groupby for multiple columns对多列执行分组后选择最大值和最小值
【发布时间】:2019-03-23 12:18:07
【问题描述】:

我有一些温度数据,表格“weather_data”的形式包含以下字段:

Month   Day   Element   Data_Value
4       12    TMAX         53     
4       08    TMAX         62     
4       12    TMAX         78     
4       12    TMIN        -32     
4       12    TMIN        -12     

我希望得到的是对元素 [Month, Day, Element] 执行 groupby 后的最大值和最小值:

Month   Day   Element   Data_Value
4       12    TMAX         78     
              TMIN        -32     
4       08    TMAX         62     

我运行了代码

weather_data.groupby(['Month','Day','Element'])['Data_Value']

但仅在获取每个 TMAX 和 TMIN 的第一个值的情况下获得输出(而不是获取每月每天的最大 TMAX 和最小 TMIN):

Month   Day   Element   Data_Value
4       12    TMAX         53     
              TMIN        -32     
4       08    TMAX         62     

请告诉我需要添加哪些其他命令才能获得所需的输出。 谢谢!

【问题讨论】:

    标签: pandas pandas-groupby


    【解决方案1】:

    试试这个:

    max = df.loc[df['Element'] == 'TMAX'].groupby(['Month','Day','Element'])['Data_Value'].max()
    min = df.loc[df['Element'] == 'TMIN'].groupby(['Month','Day','Element'])['Data_Value'].min()
    
    pd.concat([max, min]).reset_index()
    
    out:
    
    
        Month   Day Element Data_Value
    0   4   8   TMAX    62
    1   4   12  TMAX    78
    2   4   12  TMIN    -32
    

    【讨论】:

      【解决方案2】:

      检查

      df['Func']=df.Element.map({'TMAX':'max','TMIN':'min'})
      pd.concat([y.groupby(['Month','Day','Element'])['Data_Value'].agg(x) for x , y in df.groupby('Func')])
      Month  Day  Element
      4      8    TMAX       62
             12   TMAX       78
                  TMIN      -32
      Name: Data_Value, dtype: int64
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-12-01
        • 2015-10-15
        • 2014-12-01
        • 2020-05-16
        • 1970-01-01
        • 2020-08-19
        • 1970-01-01
        相关资源
        最近更新 更多