Объединять кадры данных с разными частотами даты и времени без NaN - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь объединить два кадра данных с разными частотами даты и времени, а также заполнить пропущенные значения дубликатами.

Датафрейм df1 с минутной частотой:

    time
0   2017-06-01 00:00:00
1   2017-06-01 00:01:00
2   2017-06-01 00:02:00
3   2017-06-01 00:03:00
4   2017-06-01 00:04:00

Датафрейм df2 с почасовой частотой:

    time2               temp    hum
1   2017-06-01 00:00:00 13.5    90.0
2   2017-06-01 01:00:00 12.2    95.0
3   2017-06-01 02:00:00 11.7    96.0
4   2017-06-01 03:00:00 11.5    96.0
5   2017-06-01 04:00:00 11.1    97.0

Пока я объединил эти данные, но получил NaNs:

m2o_merge = df1.merge(df2, left_on= 'time', right_on= 'time2', how='outer')
m2o_merge.head()

    time       time2                temp    hum
0   2017-06-01 00:00:00 2017-06-01  13.5    90.0
1   2017-06-01 00:01:00 NaT         NaN     NaN
2   2017-06-01 00:02:00 NaT         NaN     NaN
3   2017-06-01 00:03:00 NaT         NaN     NaN
4   2017-06-01 00:04:00 NaT         NaN     NaN

Мой желаемый фрейм данных должен выглядеть следующим образом (NaN заполнен почасовым значением df2):

    time                temp    hum
0   2017-06-01 00:00:00 13.5    90.0
1   2017-06-01 00:01:00 13.5    90.0
2   2017-06-01 00:02:00 13.5    90.0
3   2017-06-01 00:03:00 13.5    90.0
4   2017-06-01 00:04:00 13.5    90.0
...

До сих пор я нашел это решение: объединение серии / кадра данных с разными частотами времени в python , но столбец Datetime не является моим индексом. Кто-нибудь знает, как туда добраться?

1 Ответ

0 голосов
/ 30 мая 2019

В соответствии с предложением Бен Пап я выполнил следующие два шага в качестве решения:

import pandas as pd 
data1 = {'time':pd.date_range('2017-06-01 00:00:00','2017-06-01 00:09:00', freq='T')} 
data2 = {'time2':pd.date_range('2017-06-01 00:00:00','2017-06-01 04:00:00', freq='H'), 'temp':[13.5,12.2,11.7,11.5,11.1], 'hum':[90.0,95.0,96.0,96.0,97.0]}

# Create DataFrame
df1 = pd.DataFrame(data1) 
df2 = pd.DataFrame(data2) 

m2o_merge = df1.merge(df2, left_on= 'time', right_on= 'time2', how='outer')
m2o_merge.head()

m2o_merge.fillna(method='ffill', inplace=True)
filled_df = m2o_merge.drop(['time2'], axis=1)
filled_df.head()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...