Невозможно заполнить пропущенные часы соответствующими значениями в кадре данных панд - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть набор данных, который в основном представляет собой список списков

data = [[(datetime.datetime(2018, 12, 6, 10, 0), Decimal('7.0000000000000000')), (datetime.datetime(2018, 12, 6, 11, 0), Decimal('2.0000000000000000')), (datetime.datetime(2018, 12, 6, 12, 0), Decimal('43.6666666666666667')), (datetime.datetime(2018, 12, 6, 14, 0), Decimal('8.0000000000000000')), (datetime.datetime(2018, 12, 7, 9, 0), Decimal('12.0000000000000000')), (datetime.datetime(2018, 12, 7, 10, 0), Decimal('2.0000000000000000')), (datetime.datetime(2018, 12, 7, 11, 0), Decimal('2.0000000000000000')), (datetime.datetime(2018, 12, 7, 17, 0), Decimal('2.0000000000000000'))], [(datetime.datetime(2018, 12, 6, 10, 0), 28.5), (datetime.datetime(2018, 12, 6, 11, 0), 12.75), (datetime.datetime(2018, 12, 6, 12, 0), 12.15), (datetime.datetime(2018, 12, 6, 14, 0), 12.75), (datetime.datetime(2018, 12, 7, 9, 0), 12.75), (datetime.datetime(2018, 12, 7, 10, 0), 12.75), (datetime.datetime(2018, 12, 7, 11, 0), 12.75), (datetime.datetime(2018, 12, 7, 17, 0), 12.75)]]

В основном он содержит два списка, каждый из которых содержит столбцы date и metric.Мне нужно извлечь значения столбцов метрик для каждого списка и найти взаимосвязь между ними.

Примечание: даты похожи в каждом списке

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

data1 = data[0]
data2 = data[1]

df1 = pd.DataFrame(data1)
df1[0] = pd.to_datetime(df1[0], errors='coerce')
df1.set_index(0, inplace=True)

df2 = pd.DataFrame(data2)
df2[0] = pd.to_datetime(df2[0], errors='coerce')
df2.set_index(0, inplace=True)

Теперь я объединяю два фрейма данных (оба они имеют одинаковые даты).

df = pd.merge(df1,df2, how='inner', left_index=True, right_index=True)

Теперь мой фрейм данных выглядит примерно такthis

                                     1_x    1_y
0                                              
2018-12-06 10:00:00   7.0000000000000000  28.50
2018-12-06 11:00:00   2.0000000000000000  12.75
2018-12-06 12:00:00  43.6666666666666667  12.15
2018-12-06 14:00:00   8.0000000000000000  12.75
2018-12-07 09:00:00  12.0000000000000000  12.75
2018-12-07 10:00:00   2.0000000000000000  12.75
2018-12-07 11:00:00   2.0000000000000000  12.75
2018-12-07 17:00:00   2.0000000000000000  12.75

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

Теперь я видел этот пример, в котором говорится о переиндексации https://www.tutorialspoint.com/python_pandas/python_pandas_reindexing.htm, но я не уверен, как повторить это в моем примере.Значения должны быть установлены с использованием interpolate, но этот метод дает только ffill, bfill и nearest.

Как добавить недостающие часы с соответствующими значениями?

Примечание:Набор данных является выводом запроса sql. Для обработки типа Decimal в выводе я использовал from decimal import Decimal.

1 Ответ

0 голосов
/ 07 декабря 2018

Попробуйте:

df.resample('H').interpolate()

Вывод:

                          1_x    1_y
0                                    
2018-12-06 10:00:00   7.000000  28.50
2018-12-06 11:00:00   2.000000  12.75
2018-12-06 12:00:00  43.666667  12.15
2018-12-06 13:00:00  25.833333  12.45
2018-12-06 14:00:00   8.000000  12.75
2018-12-06 15:00:00   8.210526  12.75
2018-12-06 16:00:00   8.421053  12.75
2018-12-06 17:00:00   8.631579  12.75
2018-12-06 18:00:00   8.842105  12.75
2018-12-06 19:00:00   9.052632  12.75
2018-12-06 20:00:00   9.263158  12.75
2018-12-06 21:00:00   9.473684  12.75
2018-12-06 22:00:00   9.684211  12.75
2018-12-06 23:00:00   9.894737  12.75
2018-12-07 00:00:00  10.105263  12.75
2018-12-07 01:00:00  10.315789  12.75
2018-12-07 02:00:00  10.526316  12.75
2018-12-07 03:00:00  10.736842  12.75
2018-12-07 04:00:00  10.947368  12.75
2018-12-07 05:00:00  11.157895  12.75
2018-12-07 06:00:00  11.368421  12.75
2018-12-07 07:00:00  11.578947  12.75
2018-12-07 08:00:00  11.789474  12.75
2018-12-07 09:00:00  12.000000  12.75
2018-12-07 10:00:00   2.000000  12.75
2018-12-07 11:00:00   2.000000  12.75
2018-12-07 12:00:00   2.000000  12.75
2018-12-07 13:00:00   2.000000  12.75
2018-12-07 14:00:00   2.000000  12.75
2018-12-07 15:00:00   2.000000  12.75
2018-12-07 16:00:00   2.000000  12.75
2018-12-07 17:00:00   2.000000  12.75
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...