Хобрук: Ваш путь к мастерству в программировании

Объединение двух фреймов данных по дате

У меня есть два фрейма данных, используя панды, один (df_1) - это средняя температура по дням в году до определенного момента времени (например, средняя температура за все дни 2014 года до 01.03.2014), а другой (df_2 ) - средняя дневная температура за последние 30 лет.

Что я хочу сделать, так это заполнить первый фрейм данных средними значениями по дням во втором, я не могу использовать день года из-за некоторых високосных лет, но я не уверен, что это правильный путь. Я нашел способ получить среднюю дневную температуру (Получите средний год (среднее количество дней за несколько лет) в Pandas), чтобы получить df_3. Моя конечная цель - заполнить df_1 за недостающие дни (итак, 01.04.2014, ..., 31.12.2014)

df_1 = pd.DataFrame({
               'Date': ['01/01/2014','02/01/2014','03/01/2014'], 'T_Avg_2014': [5,6,0.7]})

df_2 = pd.DataFrame({
               'Date': ['01/01/2009','02/01/2010','01/01/2011'], 'T_Avg': [5,-8,-7]})




index = pd.MultiIndex.from_tuples([('1', '1'),
                                   ('1', '2'),
                                  ('1', '3'),
                                   ('2', '1')],
                                 names=['month', 'day'])
columns = [('T_Avg')]
df_3 = pd.DataFrame([3,4,8,10],
                 index=index,
                 columns=columns)

Ответы:


1

Вот способ добиться этого:

from datetime import datetime
import numpy as np
import pandas as pd

# Create date ranges
date1 = pd.date_range(datetime(2014,1,1), datetime(2014,3,1)) # 2014
date2 = pd.date_range(datetime(1983,1,1), datetime(2013,12,31)) # 30 years

# Create data frames
df1 = pd.DataFrame({'temperature': np.random.rand(len(date1))*100}, index = date1)
df2 = pd.DataFrame({'temperature': np.random.rand(len(date2))*100}, index = date2)

# Compute average daily temperature from 30 year data
df3 = df2.groupby([df2.index.month, df2.index.day]).mean()
df3 = df3.reset_index().rename(columns={'level_0': 'month', 'level_1': 'day'})

# Get data to use to complete df1
idx = df3.index[(df3.month == 3) & (df3.day == 1)][0] + 1 # All past March 1st
data_fill = df3.loc[idx:, ['month', 'day', 'temperature']]
data_fill['date_time'] = pd.to_datetime(data_fill.month.map(str)+'-'+data_fill.day.map(str)+'-2014')
data_fill = data_fill.set_index('date_time')
data_fill = data_fill.drop(columns=['month', 'day'])

# Combine data frames
df4 = pd.concat([df1, data_fill])

# Visualize data
df4.plot()

Комбинированные данные о температуре

Обратите внимание, как сглаживаются данные после 1 марта, потому что это 30-летнее среднее значение случайно сгенерированных данных, в то время как данные за первые 2 месяца не были усреднены.

27.03.2019
Новые материалы

Понимание СТРУКТУРЫ ДАННЫХ И АЛГОРИТМА.
Что такое структуры данных и алгоритмы? Термин «структура данных» используется для описания того, как данные хранятся, а алгоритм используется для описания того, как данные сжимаются. И данные, и..

Как интегрировать модель машинного обучения на ios с помощью CoreMl
С выпуском новых функций, таких как CoreML, которые упростили преобразование модели машинного обучения в модель coreML. Доступная модель машинного обучения, которую можно преобразовать в модель..

Создание успешной организации по науке о данных
"Рабочие часы" Создание успешной организации по науке о данных Как создать эффективную группу по анализу данных! Введение Это обзорная статья о том, как создать эффективную группу по..

Технологии и проблемы будущей работы
Изучение преимуществ и недостатков технологий в образовании В быстро меняющемся мире технологии являются решающим фактором в формировании будущего работы. Многие отрасли уже были..

Игорь Минар из Google приедет на #ReactiveConf2017
Мы рады сообщить еще одну замечательную новость: один из самых востребованных спикеров приезжает в Братиславу на ReactiveConf 2017 ! Возможно, нет двух других кланов разработчиков с более..

Я собираюсь научить вас Python шаг за шагом
Привет, уважаемый энтузиаст Python! 👋 Готовы погрузиться в мир Python? Сегодня я приготовил для вас кое-что интересное, что сделает ваше путешествие более приятным, чем шарик мороженого в..

Альтернатива шаблону исходящих сообщений для архитектуры микросервисов
Познакомьтесь с двухэтапным сообщением В этой статье предлагается альтернативный шаблон для папки Исходящие : двухэтапное сообщение. Он основан не на очереди сообщений, а на..