【问题标题】:How to convert data frame for time series analysis in Python?如何在 Python 中转换数据框以进行时间序列分析?
【发布时间】:2022-01-04 05:13:30
【问题描述】:

我有一个为期两年的大约 13000 行和 2 列(文本和日期)的数据集。其中一列是 yyyy-mm-dd 格式的日期。我想执行时间序列分析,其中 x 轴是日期(每天),y 轴是相应日期的文本频率。

我想如果我创建一个新的数据框,其中包含唯一日期和相应日期的文本数量,就可以解决我的问题。

样本数据

如何创建一个具有每天文本频率的新列?例如:

提前致谢!

【问题讨论】:

    标签: python-3.x dataframe time-series


    【解决方案1】:

    根据您要解决的任务,我可以看到此数据集的两个选项。

    • 如您在示例中所示,计算每天文本字段出现的次数,与文本字段的值无关。
    • 或者,统计文本字段中每个唯一值每天出现的次数。然后,您将为文本字段的每个可能值设置一列,如果这些值是纯粹的分类值,这可能更有意义。

    首先要做的事情:

    import pandas as pd
    df = pd.DataFrame(data={'Date':['2018-01-01','2018-01-01','2018-01-01', '2018-01-02', '2018-01-03'], 'Text':['A','B','C','A','A']})
    df['Date'] = pd.to_datetime(df['Date']) #convert to datetime type if not already done
    
             Date Text
    0  2018-01-01    A
    1  2018-01-01    B
    2  2018-01-01    C
    3  2018-01-02    A
    4  2018-01-03    A
    

    然后是选项一:

    df = df.groupby('Date').count()
    
                Text
    Date            
    2018-01-01     3
    2018-01-02     1
    2018-01-03     1
    

    对于选项二:

    df[df['Text'].unique()] = pd.get_dummies(df['Text'])
    df = df.drop('Text', axis=1)
    df = df.groupby('Date').sum()
    
                A  B  C
    Date               
    2018-01-01  1  1  1
    2018-01-02  1  0  0
    2018-01-03  1  0  0
    

    get_dummies 函数将为文本字段的每个可能值创建一列。然后,每一列都是数据帧每一行的布尔指示符,告诉我们在这一行中出现了 Text 字段的哪个值。然后,我们可以通过 Date 字段简单地使用 groupby 进行总和聚合。

    如果你不熟悉groupby和聚合操作的使用,我建议你先阅读this guide

    【讨论】:

      猜你喜欢
      • 2021-12-05
      • 1970-01-01
      • 2018-04-11
      • 2022-01-10
      • 1970-01-01
      • 2018-03-31
      • 2011-10-02
      • 2021-06-01
      • 1970-01-01
      相关资源
      最近更新 更多