在python中如何基于年数拆分数据帧?

在python中如何基于年数拆分数据帧?,python,pandas,statistics,data-science,pyramid-arima,Python,Pandas,Statistics,Data Science,Pyramid Arima,我有一个名为“dataframe”的数据框架,其中包含一系列特定日期的销售信息。每个日期条目的格式为YYYY-MM-DD,数据范围为2012年至2017年。我想把这个数据框分成6个独立的数据框,每年一个。例如,第一个拆分数据帧将包含2012年的所有条目 我想我能在下面的代码中做到这一点。我每年将数据框拆分为一个,并将它们放在“年份”列表中。然而,当我尝试在每个数据帧上运行auto_arima时,我会得到一个错误“Found input variables with inconsistent nu

我有一个名为“dataframe”的数据框架,其中包含一系列特定日期的销售信息。每个日期条目的格式为YYYY-MM-DD,数据范围为2012年至2017年。我想把这个数据框分成6个独立的数据框,每年一个。例如,第一个拆分数据帧将包含2012年的所有条目

我想我能在下面的代码中做到这一点。我每年将数据框拆分为一个,并将它们放在“年份”列表中。然而,当我尝试在每个数据帧上运行auto_arima时,我会得到一个错误“Found input variables with inconsistent number of samples”

我认为这是因为我没有正确地拆分原始数据帧。如何根据年份正确分割数据帧

#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

您可以使用datetime accesor按年份筛选行,并按年份创建新的数据帧

import datetime as dt
dataframe1=dataframe[dataframe['Date'].dt.year == 2012]

如果要按所有可用年份拆分数据框,可以通过在数据框中查找唯一年份来完成此操作,然后循环遍历这些唯一年份,然后使用布尔索引在循环中过滤掉每一年

因此,这个想法可以在如下函数中实现:

def split_years(dt):
    dt['year'] = dt['Date'].dt.year
    return [dt[dt['year'] == y] for y in dt['year'].unique()]

上述函数的结果将是一个数据帧列表,每个数据帧都有一年。

如果没有看到您的数据帧或函数定义,我们无法确定您的问题所在。我建议您在循环中打印
years[x].head()
,看看它是否符合您的期望。