Вы можете выполнить следующие шаги, чтобы расширить строки вашего фрейма данных от месячных до суточных значений, а затем отобразить среднее дневное значение для каждого месячного значения в ваших столбцах.
Давайте начнем с фрейма данных, аналогичного примеру, который выдал, но только за январь и февраль:
import pandas as pd
df = pd.DataFrame({'column_1':[31,28], 'column_2':[62,56]}, index=[201801, 201802])
df.index.name='Month'
Что выглядит так:
column_1 column_2
Month
201801 31 62
201802 28 56
Теперь нам нужно переформатировать, как отображаются месяцы в индексе, чтобы мы могли изменитьтип данных индекса в Pandas period_range :
df.index = df.index.map(str)
df.index = df.index.str[0:4] + '-' + df.index.str[-2:]
df.index = pd.period_range(start=df.index.values[0], periods=len(df.index.values), freq='m')
Выполнение следующей строки позволяет нам преобразовывать ежемесячные строки в строки для каждого дня:
df = df.resample('D').ffill()
СейчасУ нас есть записи для каждого дня, которые выглядят так:
column_1 column_2
2018-01-01 31 62
2018-01-02 31 62
2018-01-03 31 62
2018-01-04 31 62
...
2018-02-25 28 56
2018-02-26 28 56
2018-02-27 28 56
2018-02-28 28 56
Но мы еще не закончили.Нам по-прежнему необходимо отображать средние значения daily этих месячных значений.Для этого нам нужно знать количество дней в каждом календарном месяце.Следующие шаги позволяют нам получить количество дней для каждого месяца, а затем вычислить среднесуточные значения для каждой строки столбца без использования цикла for:
daily = df.groupby(pd.Grouper(freq='M')).count()
daily = daily.iloc[:,0]
daily = daily.resample('D').ffill().rename('days_in_month')
df = df.join(daily)
cols = ['column_1', 'column_2']
for col in cols:
df[col] = df[col]/df['days_in_month']
df = df.drop('days_in_month', axis=1)
Теперь наш информационный кадр находится вв правильном формате и отображает среднесуточное значение (усредненное по количеству календарных дней в этом месяце) значения каждого месяца:
column_1 column_2
2018-01-01 1.0 2.0
2018-01-02 1.0 2.0
2018-01-03 1.0 2.0
2018-01-04 1.0 2.0
2018-01-05 1.0 2.0
...
2018-02-24 1.0 2.0
2018-02-25 1.0 2.0
2018-02-26 1.0 2.0
2018-02-27 1.0 2.0
2018-02-28 1.0 2.0