Сгруппируйте по Datetime и задайте наиболее частое строковое значение в других столбцах. - PullRequest
0 голосов
/ 18 октября 2019

В настоящее время у меня есть набор данных с 4 столбцами. У одной есть метки времени, а у других есть строки, которые представляют состояния электросчетчиков, такие как «ПРОДУКТ», «ПРОДУКТ», «ОБОГРЕВ» и т. Д.

Данные в настоящее время представлены в 10-минутном формате. Мне нужно получать эти данные ежечасно и сохранять наиболее частые значения. Поэтому, если у меня есть «ПРОДУКТ, ПРОДУКТ, ПРОДУКТ, ВОДА, ТЕПЛО, ВОДОРОФ» для всех этих 10-метровых временных меток, я хочу, чтобы он показал ПРОДУКТ. В ситуации, когда у меня есть 3 строки, показывающие дважды или 2 строки, показывающие трижды, он может выбрать любую из них.

Я думал об организации данных по частоте и получении наибольшего (1) значения, но я могу 'не заставить его работать.

Вот что у меня есть:


TimeStamp               Meter1       Meter2     Meter3
2019-09-16 12:00:00     OFFWATER    PRODUCT     OFF
2019-09-16 12:10:00     HEAT        PRODUCT     OFF
2019-09-16 12:20:00     FANS        PRODUCT     OFF
2019-09-16 12:30:00     FANS        PRODUCT     OFF
2019-09-16 12:40:00     FANS        PRODUCT     OFF
2019-09-16 12:50:00     FANS        PRODUCT     OFF
2019-09-16 13:00:00     HEAT        PRODUCT     OFF
2019-09-16 13:10:00     HEAT        PRODUCT     OFF
2019-09-16 13:20:00     HEAT        PRODUCT     OFF
2019-09-16 13:30:00     WATER       PRODUCT     OFF
2019-09-16 13:40:00     WATER       PRODUCT     OFF
2019-09-16 13:50:00     PRODUCT     PRODUCT     OFF

Вот что мне нужно:

TimeStamp               Meter1       Meter2     Meter3
2019-09-16 12:00:00     FANS        PRODUCT     OFF
2019-09-16 13:00:00     HEAT        PRODUCT     OFF

Любая помощь будет оценена.

1 Ответ

1 голос
/ 18 октября 2019

Мы можем проверить mode, обратите внимание, здесь я разрезаю 1-е значение после mode, поскольку у нас может быть два значения - режимы для группы

df.groupby(df['TimeStamp'].dt.strftime('%Y-%m-%d %H')).apply(lambda x : x.mode().iloc[0])
0                       TimeStamp Meter1   Meter2 Meter3
TimeStamp                                               
2019-09-16 12 2019-09-16 12:00:00   FANS  PRODUCT    OFF
2019-09-16 13 2019-09-16 13:00:00   HEAT  PRODUCT    OFF
...