【问题标题】:How to split dataframe based on years in python?如何在python中根据年份拆分数据框?
【发布时间】:2018-12-06 22:46:32
【问题描述】:

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

【问题讨论】:

  • 没有看到您的数据框或看到您的函数定义,我们无法确定您的问题出在哪里。我建议您在循环中打印 years[x].head() 以查看是否符合您的预期。

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


【解决方案1】:

您可以使用日期时间访问器按年份过滤行并按年份创建新数据框

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

【讨论】:

    【解决方案2】:

    如果您想按所有可用年份拆分数据框,您可以通过在数据框中查找唯一年份来实现此目的,然后遍历这些唯一年份,然后使用布尔索引在每年的循环中过滤掉。

    所以这个想法可以在如下函数中实现:

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

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

    【讨论】:

    • 我这几天一直在寻找这样的东西。我是 python 和 pandas 的新手,这让我可以独立构建几个项目。我认为它们最终比我制作的 kuldgy 更“pythonic”。谢谢!
    猜你喜欢
    • 2012-03-03
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    • 2021-09-21
    • 1970-01-01
    • 2020-11-21
    • 2017-11-04
    相关资源
    最近更新 更多