У меня вопрос по методу ресэмплинга pandas Dataframes. У меня есть DataFrame с одним наблюдением в день:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randint(0,100,size=(366, 1)), columns=list('A'))
df.index = pd.date_range(datetime.date(2016,1,1),datetime.date(2016,12,31))
если я хочу вычислить сумму (или другую) за каждый месяц, я могу напрямую:
EOM_sum = df.resample(rule="M").sum()
однако у меня есть конкретный календарь (нерегулярная частота):
import datetime
custom_dates = pd.DatetimeIndex([datetime.date(2016,1,13),
datetime.date(2016,2,8),
datetime.date(2016,3,16),
datetime.date(2016,4,10),
datetime.date(2016,5,13),
datetime.date(2016,6,17),
datetime.date(2016,7,12),
datetime.date(2016,8,11),
datetime.date(2016,9,10),
datetime.date(2016,10,9),
datetime.date(2016,11,14),
datetime.date(2016,12,19),
datetime.date(2016,12,31)])
Если я хочу вычислить сумму для каждого периода, я в настоящее время добавляю в df временный столбец с концом периода, которому принадлежит каждая строка, а затем выполняю операцию с помощью groupby:
df["period"] = custom_dates[custom_dates.searchsorted(df.index)]
custom_sum = df.groupby(by=['period']).sum()
Однако это довольно грязно и не выглядит питоническим. Есть ли в Pandas встроенный метод для этого? Заранее спасибо.
custom_sum = df.groupby(custom_dates[custom_dates.searchsorted(df.index)]).sum()
- person jezrael   schedule 25.01.2017resample
. - person JMat   schedule 25.01.2017