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

时间:2018-06-27 23:58:35

标签: python pandas statistics data-science pyramid-arima

我有一个名为“ 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

2 个答案:

答案 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]