Pandas Dataframe:将指数更改为年份,将列更改为月份

时间:2017-04-12 19:19:07

标签: python pandas numpy

目前我正在处理FRED的一些数据,我使用quandl。 我收到的数据是在数据框中。

它目前如此返回

DATE    VALUE
1966-01-01  31.880
1966-02-01  32.080
1966-03-01  32.180
1966-04-01  32.280
... ...
2013-08-01  233.323
2013-09-01  233.632
2013-10-01  233.718
2013-11-01  234.121

但我想重新组织显示为:

        Jan     Feb     Mar     Apr...
1966    31.880  32.080  32.180  32.280
...
2013    233.323 233.632 233.718 234.121

编辑:我认为这会很有用。

DatetimeIndex(['1966-01-01', '1966-02-01', '1966-03-01', '1966-04-01',
               '1966-05-01', '1966-06-01', '1966-07-01', '1966-08-01',
               '1966-09-01', '1966-10-01',
               ...
               '2015-04-01', '2015-05-01', '2015-06-01', '2015-07-01',
               '2015-08-01', '2015-09-01', '2015-10-01', '2015-11-01',
               '2015-12-01', '2016-01-01'],
              dtype='datetime64[ns]', name=u'DATE', length=601, freq=None)
Index([u'VALUE'], dtype='object')

2 个答案:

答案 0 :(得分:3)

您可以使用pandas.crosstab

df.DATE = pd.to_datetime(df.DATE)    # optional if the DATE column is already datetime type

pd.crosstab(df.DATE.dt.year, 
            df.DATE.dt.strftime("%b"), 
            df.VALUE, 
            aggfunc="sum",
            rownames=["Year"],
            colnames=["Month"])

enter image description here

更新:如果您将日期作为索引:

pd.crosstab(df.index.year, 
            df.index.strftime("%b"), 
            df.VALUE, 
            aggfunc="sum",
            rownames=["Year"],
            colnames=["Month"])

答案 1 :(得分:1)

我想用pd.Seriesunstack

来构建它
pd.Series(
    df.VALUE.values,
    [df.DATE.dt.year.values,
     df.DATE.dt.strftime("%b").values]
).unstack()

        Apr      Aug    Feb    Jan    Mar      Nov      Oct      Sep
1966  32.28      NaN  32.08  31.88  32.18      NaN      NaN      NaN
2013    NaN  233.323    NaN    NaN    NaN  234.121  233.718  233.632

或等同于

df.set_index(
    [df.DATE.dt.year,
     df.DATE.dt.strftime('%b')],
).VALUE.rename_axis([None, None]).unstack()

天真的时间

enter image description here