Выбор максимальных и минимальных значений после выполнения группового режима для нескольких столбцов - PullRequest
0 голосов
/ 23 марта 2019

У меня есть некоторые данные о температуре в виде таблицы '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     

То, что я хотел бы получить, - это максимальное и минимальное значения после выполнения 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 и min TMIN за день месяца):

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

Скажите, пожалуйста, какие дополнительные команды мне нужно добавить, чтобы получить желаемый результат? Спасибо!

Ответы [ 2 ]

1 голос
/ 23 марта 2019

попробуйте это:

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
0 голосов
/ 23 марта 2019

чек с

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...