2016-08-21 3 views
1

У меня есть следующие данные, которые имеют Value, Time и Date колонок:Создать ежедневно качению ток Наибольшего значения серии

raw_date_img

Желаемой выход

Я хотел бы создать новую серию захват строк для текущего максимума Value в следующем примере:

img2

Это каждый день обрабатывает колонку Value и фиксирует последние самые высокие Value.

  • В 9:00 от 1/1/00 Value было 2, так что это было самое высокое.
  • В 17:00 1/1/00 Value было 3, поэтому мы фиксируем это.

Пожалуйста, смотрите df.to_dict() ниже, чтобы воспроизвести это:

df.to_dict() 

    {'Date': {0: Timestamp('2000-01-01 00:00:00'), 
     1: Timestamp('2000-01-01 00:00:00'), 
     2: Timestamp('2000-01-01 00:00:00'), 
     3: Timestamp('2000-01-02 00:00:00'), 
     4: Timestamp('2000-01-02 00:00:00'), 
     5: Timestamp('2000-01-02 00:00:00'), 
     6: Timestamp('2000-01-03 00:00:00'), 
     7: Timestamp('2000-01-03 00:00:00'), 
     8: Timestamp('2000-01-03 00:00:00'), 
     9: Timestamp('2000-01-04 00:00:00'), 
     10: Timestamp('2000-01-04 00:00:00'), 
     11: Timestamp('2000-01-04 00:00:00')}, 
    'Time': {0: datetime.time(9, 0), 
     1: datetime.time(13, 0), 
     2: datetime.time(17, 0), 
     3: datetime.time(9, 0), 
     4: datetime.time(13, 0), 
     5: datetime.time(17, 0), 
     6: datetime.time(9, 0), 
     7: datetime.time(13, 0), 
     8: datetime.time(17, 0), 
     9: datetime.time(9, 0), 
     10: datetime.time(13, 0), 
     11: datetime.time(17, 0)}, 
    'Value': {0: 2, 
     1: 2, 
     2: 3, 
     3: 2, 
     4: 3, 
     5: 3, 
     6: 1, 
     7: 1, 
     8: 1, 
     9: 3, 
     10: 1, 
     11: 2}} 

ответ

1

IIUC, вам нужно использовать cummax, чтобы получить кумулятивный максимум для Value колонны, затем прерывают дублированные записи после того, как их группировка wrt Date колонка.

grouped = df.groupby('Date').apply(lambda x: x['Value'].cummax()   \ 
                 .drop_duplicates()) \ 
                 .reset_index() 
print(df[df.index.isin(grouped['level_1'])]) 

     Date  Time Value 
0 2000-01-01 09:00:00  2 
2 2000-01-01 17:00:00  3 
3 2000-01-02 09:00:00  2 
4 2000-01-02 13:00:00  3 
6 2000-01-03 09:00:00  1 
9 2000-01-04 09:00:00  3 
+1

Это именно то, что я хотел. благодаря – ade1e

Смежные вопросы