【问题标题】:Create Time-Series Dataframe for Regression in Python在 Python 中为回归创建时间序列数据框
【发布时间】:2022-10-24 15:45:30
【问题描述】:

我有一个犯罪数据集,其中每一行都是记录的犯罪,相关列是日期、犯罪类型、地区。

这是一个一周内只有 2 个地区和 2 种犯罪类型的示例:

我想将其扩展为可用于运行回归的数据框。在这个简单的示例中,我需要列是日期、地区、谋杀、盗窃。每个地区在该范围内的每个日期都有不同的行,犯罪类型类别将是该地区在该日期犯下的犯罪数量

这是最终的数据框:

我需要一个时间序列,其中#Rows = #Districts * #Dates,并且每种犯罪类型都有一个列

有没有什么好方法可以在不循环数据帧的情况下做到这一点?

我可以像这样创建日期列表:

datelist = pd.date_range(start='01-01-2011', end='12-31-2015', freq='1d')

但是如何将它与我的其他数据框合并并创建上述列?

【问题讨论】:

    标签: python dataframe time-series regression


    【解决方案1】:

    我将尝试在这里回答我自己的问题。我想我想通了,但如果对我的方法有任何意见,我将不胜感激。我能够在不循环的情况下做到这一点,而是使用 pivot_table 和合并。

    导入包:

    import pandas as pd
    from datetime import datetime
    import numpy as np
    

    导入犯罪数据集:

    crime_df = pd.read_csv("/Users/howard/Crime_Data.csv")
    

    创建范围内的日期列表:

    datelist = pd.date_range(start='01-01-2011', end='12-31-2015', freq='1d')
    

    为此日期列表的长度和唯一地区列表的长度创建变量:

    nd = len(datelist)
    nu = len(df_crime['District'].unique())
    

    创建结合日期和地区的数据框:

    date_df = pd.DataFrame({'District':df_crime['District'].unique().tolist()*nd, 'Date':np.repeat(datelist,nu)})
    

    现在我们转向我们的犯罪数据集。

    我添加了一列 1,以便在下一步中求和:

    crime_df["ones"] = 1
    

    接下来,我们获取我们的犯罪数据并使用 Pandas pivot_table 将其以广泛的形式呈现:

    crime_df = pd.pivot_table(crime_df,index=["District","Date"], columns="Crime Type", aggfunc="sum")
    

    这给了我堆叠级别的列和一个不必要的索引,所以我用以下内容删除了它们:

    crime_df.columns.droplevel()
    
    crime_df.reset_index(inplace=True)
    

    最后一步是合并两个数据集。我想将 date_df 放在首位并合并,因为它包括范围内的所有日期以及每个日期包含的所有地区。因此,这使用了左合并。

    final_df = pd.merge(date_df, crime_df, on=["Date", "District"],how="left")
    

    现在我可以用 0 填充 NaN 来完成

    final_df.fillna(0, inplace=True)
    

    我们的最终数据框采用正确的形式进行时间序列分析 - 回归、绘图等。如果日期列是索引,我使用的 matplotlib.pyplot 中的许多图更容易制作。这可以这样做:

    df_final = df_final.set_index(['Date'])
    

    而已!希望这对其他人有所帮助,并请评论任何改进的方法。

    【讨论】:

      猜你喜欢
      • 2015-09-17
      • 2021-08-13
      • 2019-10-18
      • 2022-06-21
      • 1970-01-01
      • 2020-09-30
      • 1970-01-01
      • 2021-03-18
      • 1970-01-01
      相关资源
      最近更新 更多