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

Python 合并年和月列以形成时间序列数据的索引,python,time-series,Python,Time Series,我有一个以下格式的降雨数据集 年一月二月三月四月五月六月七月八月九月十月十一月十二月 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.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.

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

年一月二月三月四月五月六月七月八月九月十月十一月十二月
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.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数据类型,并且雨量列应保存一年中特定月份的雨量值


请帮助我执行此转换。

我假设您已经创建了数据帧,因此描述 下面省略此步骤(和导入)

从定义一个函数(稍后将应用该函数)开始创建
日期
列来自
列:

def cnv(row):
    datStr = '01 ' + row.MONTH + ' ' + str(row.YEAR)
    return pd.to_datetime(datStr, format='%d %b %Y').date()
然后进行如下操作:

  • 创建第二个数据框,年和月名称作为多索引:

    df2 = df.set_index('YEAR').stack().to_frame(name='RAINFALL')
    
  • 将多索引转换为常规列,重命名(原始中未命名 多索引)1级至

    df2 = df2.reset_index().rename(columns={'level_1': 'MONTH'})
    
  • 应用上述创建的函数,创建
    DATE
    列:

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

    df2 = df2.drop(['YEAR', 'MONTH'], axis=1).sort_index(axis=1)
    
  • 最初的两个步骤可以链接到一条指令中,但我故意
    分别编写它们,以便于测试中间结果的打印输出。

    我假设您已经创建了数据帧,因此描述 下面省略此步骤(和导入)

    从定义一个函数(稍后将应用该函数)开始创建
    日期
    列来自
    列:

    def cnv(row):
        datStr = '01 ' + row.MONTH + ' ' + str(row.YEAR)
        return pd.to_datetime(datStr, format='%d %b %Y').date()
    
    然后进行如下操作:

  • 创建第二个数据框,年和月名称作为多索引:

    df2 = df.set_index('YEAR').stack().to_frame(name='RAINFALL')
    
  • 将多索引转换为常规列,重命名(原始中未命名 多索引)1级至

    df2 = df2.reset_index().rename(columns={'level_1': 'MONTH'})
    
  • 应用上述创建的函数,创建
    DATE
    列:

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

    df2 = df2.drop(['YEAR', 'MONTH'], axis=1).sort_index(axis=1)
    
  • 最初的两个步骤可以链接到一条指令中,但我故意
    单独编写它们,以简化中间结果的测试打印输出。

    编写代码非常简单;你对它的哪一方面有困难?这是非常简单的代码;你在哪方面有问题?