合并年和月列以形成时间序列数据的索引

时间:2019-03-07 18:14:45

标签: python time-series

我有以下格式的降雨数据集。

11月2月3月4月5月6月6月6月 1901 2.7 0.4 4.7 10.0 13.0 16.9 19.2 18.3 15.7 10.6 4.9 3.5
1902 4.1 3.2 7.5 10.3 10.0 15.1 18.2 17.4 15.0 10.2 6.3 3.5
1903 3.8 5.9 7.6 7.1 12.9 14.9 17.6 17.3 15.5 12.1 6.9 2.7
1904 3.0 4.6 5.5 10.3 13.6 16.3 20.2 18.5 13.9 11.2 5.4 4.8
1905 1.7 4.0 7.4 9.3 11.9 16.5 20.0 17.6 14.7 8.4 5.5 3.8

我需要采用以下格式,以便在python中执行时间序列预测。

日期降雨
1901-01-01 2.7

1901-02-01 0.4

1901-03-01 4.7

1901-04-01 10.0

DATE列必须为datetime数据类型,并且RAINFALL列应保存一年中特定月份的降雨量值。

请帮助我执行此转换。

1 个答案:

答案 0 :(得分:0)

我假设您已经创建了 DataFrame ,因此说明 下面省略了此步骤(和导入)。

从定义一个函数开始,该函数将在以后应用,以创建 DATEYEAR列中的MONTH列:

def cnv(row):
    datStr = '01 ' + row.MONTH + ' ' + str(row.YEAR)
    return pd.to_datetime(datStr, format='%d %b %Y').date()

然后继续进行以下操作:

  1. 使用YEAR和月份名称作为MultiIndex创建第二个DataFrame:

    df2 = df.set_index('YEAR').stack().to_frame(name='RAINFALL')
    
  2. 将MultiIndex转换为常规列,并重命名(原始名称中未命名) MultiIndex) level_1 MONTH

    df2 = df2.reset_index().rename(columns={'level_1': 'MONTH'})
    
  3. 使用上面创建的函数创建DATE列:

    df2['DATE'] = df2.apply(cnv, axis=1)
    
  4. 最后,删除YEARMONTH列并更改列顺序:

    df2 = df2.drop(['YEAR', 'MONTH'], axis=1).sort_index(axis=1)
    

可以将两个第一步链接成一条指令,但是我故意 分别编写它们,以简化中间结果的测试打印输出。