如何在 Python 中转换数据帧以进行时间序列分析?

How to convert data frame for time series analysis in Python?

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

我认为如果我创建一个具有唯一日期和相应日期的文本数量的新数据框就可以解决我的问题。

示例数据

我怎样才能创建一个新的列,每天显示文本的频率?例如:

提前致谢!

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

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

首先要做的事情:

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 函数将为文本字段的每个可能值创建一列。然后,每一列都是数据框每一行的布尔指示符,告诉我们文本字段的哪个值出现在这一行中。然后我们可以简单地通过 Date 字段使用 groupby 进行求和聚合。

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