我有一个名为“ dataframe”的数据框,其中包含特定日期的大量销售信息。每个日期条目的格式均为YYYY-MM-DD,数据范围为2012年至2017年。我想将此数据框分为6个单独的数据框,每年一个。因此,例如,第一个拆分数据帧将包含2012年以来的所有条目。
我认为我能够在下面的代码中做到这一点。我将数据框每年拆分为一个,并将其放入“年”列表中。但是,当我尝试在每个数据帧上运行auto_arima时,出现错误“找到的输入变量样本数量不一致。”
我认为这是因为我没有正确地正确分割原始数据帧。如何根据年份适当分割数据框?
#Partition data into years
years = [g for n, g in dataframe.set_index('Date').groupby(pd.Grouper(freq='Y'))]
#Create a list that will hold all auto_arima results for every dataframe
stepwise_models = []
#Call auto_arima on every dataframe
for x in range(len(years)-1):
currentDf = years[x]
model = auto_arima(currentDf['price'], exogenous=xreg, start_p=1, start_q=1,
max_p=3, max_q=3, m=12,
start_P=0, seasonal=True,
d=1, D=1, trace=True,
error_action='ignore',
suppress_warnings=True,
stepwise=True)
stepwise_models.append(model) #Store current auto_arima result in our stepwise_models[] list
答案 0 :(得分:1)
如果您想按所有可用年份对数据框进行拆分,可以通过在数据框中查找唯一的年份来进行此操作,然后循环遍历这些唯一的年份,然后使用布尔索引每年在循环中进行过滤。
因此,可以通过以下功能实现该想法:
def split_years(dt):
dt['year'] = dt['Date'].dt.year
return [dt[dt['year'] == y] for y in dt['year'].unique()]
上面函数的结果将是一个数据帧列表,每个数据帧都有一年。
答案 1 :(得分:0)
您可以使用datetime accesor按年份过滤行并按年份创建新的数据框
import datetime as dt
dataframe1=dataframe[dataframe['Date'].dt.year == 2012]