Pandas: MultiIndex DataFrame общие блочные временные метки - PullRequest
0 голосов
/ 06 декабря 2018

В файле данных у меня есть выборки из 3 устройств (первый столбец), которые измеряют 3 разных параметра (последние 3 столбца) на 6 разных высотах (второй столбец).Файл выглядит так:

0 2 2018-09-06T08:38:31Z 9.01 6.20 3.56
0 3 2018-09-06T08:38:41Z 8.90 5.98 3.43
0 4 2018-09-06T08:38:52Z 8.92 6.17 3.62
0 5 2018-09-06T08:39:03Z 8.96 6.13 3.56
1 0 2018-09-06T08:39:35Z 8.96 6.23 3.50
1 1 2018-09-06T08:39:45Z 9.01 6.45 3.43
1 2 2018-09-06T08:39:56Z 9.07 6.44 3.56
1 3 2018-09-06T08:40:06Z 9.08 6.49 3.56
1 4 2018-09-06T08:40:17Z 8.81 6.21 3.43
1 5 2018-09-06T08:40:28Z 9.05 6.43 3.31
2 0 2018-09-06T08:41:00Z 9.19 6.35 3.50
2 1 2018-09-06T08:41:10Z 8.83 6.31 3.50
2 2 2018-09-06T08:41:21Z 8.87 6.08 3.37
2 3 2018-09-06T08:41:31Z 9.01 6.39 3.43
2 4 2018-09-06T08:41:42Z 8.68 6.20 3.37
2 5 2018-09-06T08:41:52Z 8.87 6.39 3.43
0 2 2018-09-06T08:43:31Z 9.01 6.20 3.56
0 3 2018-09-06T08:43:41Z 8.90 5.98 3.43
0 4 2018-09-06T08:43:52Z 8.92 6.17 3.62
0 5 2018-09-06T08:43:03Z 8.96 6.13 3.56
1 0 2018-09-06T08:46:35Z 8.96 6.23 3.50
1 1 2018-09-06T08:46:45Z 9.01 6.45 3.43
1 2 2018-09-06T08:46:56Z 9.07 6.44 3.56
1 3 2018-09-06T08:46:06Z 9.08 6.49 3.56
1 4 2018-09-06T08:46:17Z 8.81 6.21 3.43
1 5 2018-09-06T08:46:28Z 9.05 6.43 3.31
2 0 2018-09-06T08:48:00Z 9.19 6.35 3.50
2 1 2018-09-06T08:48:10Z 8.83 6.31 3.50
2 2 2018-09-06T08:48:21Z 8.87 6.08 3.37
2 3 2018-09-06T08:48:31Z 9.01 6.39 3.43
2 4 2018-09-06T08:48:42Z 8.68 6.20 3.37
2 5 2018-09-06T08:48:52Z 8.87 6.39 3.43

Параметры считываются по высоте для каждого устройства.Теперь я хотел бы изменить фрейм данных таким образом, чтобы я мог выбрать параметр и иметь возможность строить временные ряды для каждой высоты каждого устройства.

Мой первый подход состоял в том, чтобы сделать метки времени уникальными для каждого "устройстваblock ", т.е.

0 2 2018-09-06T08:38:31Z 9.01 6.20 3.56
0 3 2018-09-06T08:38:31Z 8.90 5.98 3.43
0 4 2018-09-06T08:38:31Z 8.92 6.17 3.62
0 5 2018-09-06T08:38:31Z 8.96 6.13 3.56
1 0 2018-09-06T08:39:35Z 8.96 6.23 3.50
1 1 2018-09-06T08:39:35Z 9.01 6.45 3.43
1 2 2018-09-06T08:39:35Z 9.07 6.44 3.56
1 3 2018-09-06T08:39:35Z 9.08 6.49 3.56
1 4 2018-09-06T08:39:35Z 8.81 6.21 3.43
1 5 2018-09-06T08:39:35Z 9.05 6.43 3.31
2 0 2018-09-06T08:41:00Z 9.19 6.35 3.50
2 1 2018-09-06T08:41:00Z 8.83 6.31 3.50
2 2 2018-09-06T08:41:00Z 8.87 6.08 3.37
2 3 2018-09-06T08:41:00Z 9.01 6.39 3.43
2 4 2018-09-06T08:41:00Z 8.68 6.20 3.37
2 5 2018-09-06T08:41:00Z 8.87 6.39 3.43
0 2 2018-09-06T08:43:31Z 9.01 6.20 3.56
0 3 2018-09-06T08:43:31Z 8.90 5.98 3.43
0 4 2018-09-06T08:43:31Z 8.92 6.17 3.62
0 5 2018-09-06T08:43:31Z 8.96 6.13 3.56
1 0 2018-09-06T08:46:35Z 8.96 6.23 3.50
1 1 2018-09-06T08:46:35Z 9.01 6.45 3.43
1 2 2018-09-06T08:46:35Z 9.07 6.44 3.56
1 3 2018-09-06T08:46:35Z 9.08 6.49 3.56
1 4 2018-09-06T08:46:35Z 8.81 6.21 3.43
1 5 2018-09-06T08:46:35Z 9.05 6.43 3.31
2 0 2018-09-06T08:48:00Z 9.19 6.35 3.50
2 1 2018-09-06T08:48:00Z 8.83 6.31 3.50
2 2 2018-09-06T08:48:00Z 8.87 6.08 3.37
2 3 2018-09-06T08:48:00Z 9.01 6.39 3.43
2 4 2018-09-06T08:48:00Z 8.68 6.20 3.37
2 5 2018-09-06T08:48:00Z 8.87 6.39 3.43

- или, альтернативно, для каждой" группы "устройств, то есть:

0 2 2018-09-06T08:38:31Z 9.01 6.20 3.56
0 3 2018-09-06T08:38:31Z 8.90 5.98 3.43
0 4 2018-09-06T08:38:31Z 8.92 6.17 3.62
0 5 2018-09-06T08:38:31Z 8.96 6.13 3.56
1 0 2018-09-06T08:38:31Z 8.96 6.23 3.50
1 1 2018-09-06T08:38:31Z 9.01 6.45 3.43
1 2 2018-09-06T08:38:31Z 9.07 6.44 3.56
1 3 2018-09-06T08:38:31Z 9.08 6.49 3.56
1 4 2018-09-06T08:38:31Z 8.81 6.21 3.43
1 5 2018-09-06T08:38:31Z 9.05 6.43 3.31
2 0 2018-09-06T08:38:31Z 9.19 6.35 3.50
2 1 2018-09-06T08:38:31Z 8.83 6.31 3.50
2 2 2018-09-06T08:38:31Z 8.87 6.08 3.37
2 3 2018-09-06T08:38:31Z 9.01 6.39 3.43
2 4 2018-09-06T08:38:31Z 8.68 6.20 3.37
2 5 2018-09-06T08:38:31Z 8.87 6.39 3.43
0 2 2018-09-06T08:43:20Z 9.01 6.20 3.56
0 3 2018-09-06T08:43:20Z 8.90 5.98 3.43
0 4 2018-09-06T08:43:20Z 8.92 6.17 3.62
0 5 2018-09-06T08:43:20Z 8.96 6.13 3.56
1 0 2018-09-06T08:43:20Z 8.96 6.23 3.50
1 1 2018-09-06T08:43:20Z 9.01 6.45 3.43
1 2 2018-09-06T08:43:20Z 9.07 6.44 3.56
1 3 2018-09-06T08:43:20Z 9.08 6.49 3.56
1 4 2018-09-06T08:43:20Z 8.81 6.21 3.43
1 5 2018-09-06T08:43:20Z 9.05 6.43 3.31
2 0 2018-09-06T08:43:20Z 9.19 6.35 3.50
2 1 2018-09-06T08:43:20Z 8.83 6.31 3.50
2 2 2018-09-06T08:43:20Z 8.87 6.08 3.37
2 3 2018-09-06T08:43:20Z 9.01 6.39 3.43
2 4 2018-09-06T08:43:20Z 8.68 6.20 3.37
2 5 2018-09-06T08:43:20Z 8.87 6.39 3.43

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

Что у меня есть в плане кода:

col_names = ['device', 'height', 'timestamp', 'p1', 'p2', 'p3']
df = pd.read_csv(file, names=col_names, index_col=False,
                 sep=' ', engine='python', error_bad_lines=False)

df['timestamp'] = pd.to_datetime(df['timestamp'], errors='coerce')

Я могу достичь фрейма данных MultiIndex через

df.set_index(['device', 'height', 'timestamp'], inplace=True)

Но тогда я понятия не имею, как я могу установить метки времени в каждом «блоке» на общее значение (например, значение первой записи соответственно).

Я уже искал в StackOverflow и вДокументы Панд.Возможно, я просто ищу неправильные выражения, но пока не могу найти полезных записей.Любая помощь будет высоко оценен!Я надеюсь, что вы можете понять мою проблему, как я ее описал.

Заранее большое спасибо!

...