Объединить строки в одном кадре данных, которые имеют один и тот же индекс - PullRequest
0 голосов
/ 05 марта 2020

Я хотел бы иметь уникальный DateTimeIndex в кадре данных. Поэтому я бы хотел объединить две строки с одинаковым индексом в одну строку. Во время этого слияния я хотел бы применить пользовательскую формулу (например, avg/mean, max, min) к каждому столбцу.

Идея, сформулированная в данных:

Кадр данных с данными временного ряда

df_orig
+----------------------------+-------+--------+
|                            | value | value2 |
| ts                         |       |        |
+----------------------------+-------+--------+
| 2019-09-17T09:39:38.711111 | 10    | 10     |
+----------------------------+-------+--------+
| 2019-09-17T09:39:38.766666 | 1     | 3      |
+----------------------------+-------+--------+
| 2019-09-17T09:39:38.766666 | 2     | 6      |
+----------------------------+-------+--------+
| 2019-09-17T09:39:39.010101 | 2     | 4      |
+----------------------------+-------+--------+

я бы попытался отметить те строки, индекс которых не уникален . Например:

df_marked_duplicated
+----------------------------+-------+--------+-----------+
|                            | value | value2 | is_unique |
| ts                         |       |        |           |
+----------------------------+-------+--------+-----------+
| 2019-09-17T09:39:38.711111 | 10    | 10     | 1         |
+----------------------------+-------+--------+-----------+
| 2019-09-17T09:39:38.766666 | 1     | 3      | 0         |
+----------------------------+-------+--------+-----------+
| 2019-09-17T09:39:38.766666 | 2     | 6      | 0         |
+----------------------------+-------+--------+-----------+
| 2019-09-17T09:39:39.010101 | 2     | 4      | 1         |
+----------------------------+-------+--------+-----------+

, чтобы позже я мог вычислить avg на value и max на value2. Таким образом, целевой df выглядит следующим образом:

 df_target
+----------------------------+-------+--------+-----------+
|                            | value | value2 | is_unique |
| ts                         |       |        |           |
+----------------------------+-------+--------+-----------+
| 2019-09-17T09:39:38.711111 | 10    | 10     | 1         |
+----------------------------+-------+--------+-----------+
| 2019-09-17T09:39:38.766666 | 1.5   | 6      | 0         |
+----------------------------+-------+--------+-----------+
| 2019-09-17T09:39:39.010101 | 2     | 4      | 1         |
+----------------------------+-------+--------+-----------+

Я не уверен, что pd.groupby не является немного излишним, потому что - из того, что я вижу - это заставляет меня повторить это позже. Мне также интересно узнать, как дедупликация работает в pandas более подробно.

Спасибо!

Ответы [ 2 ]

1 голос
/ 05 марта 2020

Разве это не просто groupby:

df.groupby('ts').agg({'value':'mean', 'value2':'max'})
0 голосов
/ 05 марта 2020

Pandas реализация aggregate функций на groupby объектах эффективнее, чем любая пользовательская реализация. Вы также можете применять различные методы агрегирования для разных столбцов с dict функциями.

, так что в вашем случае


df.groupby(['ts'].agg({'value': 'mean', 'value2': 'max'})

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...