Как проверить дату и время максимальных значений в большом наборе данных Python - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть наборы данных, ~ 30-60 000 000 строк каждый.Каждый Name имеет один или несколько уникальных ID, связанных с ним для каждого дня в наборе данных.Некоторые OP_DATE и OP_HOUR уникальные идентификаторы могут иметь 0 или пустые значения для каждого Load1,2,3.

Я ищу способ вычисления total максимальных значений столбцовпо всем OP_DATE, которые выглядят так:

Name       ID       OP_DATE      OP_HOUR    OP_TIME     Load1       Load2     Load3
OMI        1        2001-01-01   1          1           11          10        12
OMI        1        2001-01-01   2          0.2         1           12        10
.
.
OMI        2A      2001-01-01    1          0.4                     5
.
. 
OMI        2A      2001-01-01    24         0.6         2            7        12
.
.
Kain 2     01      2002-01-01    1          0.1         6           12
Kain 2     01      2002-01-01    2          0.98        3           14        7
.
.
OMI        1       2018-01-01    1          0.89        12           10        20
.
.

Я хочу найти максимальные значения Load1, Load2, Load3 и найти что OP_DATE, OP_TIME и OP_HOUR, когда это произошло.

Вывод, который я хочу получить:

Name    ID    max OP_DATE   max OP_HOUR  max OP_TIME    max Load1   max Load2   max Load3
OMI     1     2011-06-11    22 .....         max values on dates
OMI     2A    2012-02-01    12 .....         max values on dates
Kain 2  01    2006-01-01    1.....           max values on dates

Есть ли способ, которым я могу сделать это легко?

Я пытался:

unique_MAX =  df.groupby(['Name','ID'])['Load1', 'Load2', 'Load3'].max().reset_index()

Но это сгруппировало бы только по датам и дало бы мне максимальный результат - я бы тоже хотел связанные даты, часы и время.

1 Ответ

0 голосов
/ 07 февраля 2019

Чтобы получить полный ряд информации для любых заданных полей [макс.] :

  • Получить индексные местоположения для макс. Каждой группы, которую вы желаете
  • Используйте индексы для возврата полной строки в каждом месте

Пример для нахождения максимального значения Load1 для каждой пары Имя & ID

idx = df.groupby(['Name','ID'])['Load1'].transform(max) == df['Load1']
df[idx]

Out[14]: 
    name   ID        dt  x  y
1   Fred  050  1/2/2018  2  4
4   Dave  001  1/3/2018  6  1
5  Carly  002  1/3/2018  5  7
...