对多列进行分组依据后选择最大值和最小值

时间:2019-03-23 03:26:41

标签: pandas pandas-groupby

我有一些以表“ 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     

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

检查

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