Pandas中的DateTimeIndex的索引或分组

时间:2015-02-04 17:22:25

标签: python datetime pandas group-by

我有一个66年的时间序列数据框架,S& P500每月更改有一个DatetimeIndex。如何将数据切割成年度数据列。

1)堆叠(并保留标签)DateTimeIndex属性' month'和'年'

2)没有循环

- 基本上我想像

那样切片
c_test[c_test.index.month==1]
c_test[c_test.index.month==2]
c_test[c_test.index.month==3]
c_test[c_test.index.month==4]
....up to 12

- 划分为' c_test.index.year'标签

这可能吗?或者我是否需要抛弃DateTimeIndex?

1 个答案:

答案 0 :(得分:0)

这是一种简单的方法。 使用https://www.quandl.com/api/v1/datasets/GOOG/NYSE_SPY.csv

中的数据的示例

1]加载数据,添加年和月日期

import pandas as pd
df = pd.read_csv('/Users/nicolas/Downloads/GOOG-NYSE_SPY.csv', parse_dates=[0])
df['Year'] = df['Date'].apply(lambda x: x.year)
df['Month'] = df['Date'].apply(lambda x: x.month)
df.head()

输出:

        Date    Open    High     Low   Close     Volume  Year  Month
0 2015-02-03  203.00  204.85  202.55  204.84  124212881  2015      2
1 2015-02-02  200.05  202.03  197.86  201.92  163106969  2015      2
2 2015-01-30  200.57  202.17  199.13  199.45  197729724  2015      1
3 2015-01-29  200.38  202.30  198.68  201.99  173585424  2015      1
4 2015-01-28  204.17  204.29  199.91  200.14  168514312  2015      1

2]计算每月的性能,按年份分组计算月。请注意double [以将输出保持为groupby操作的数据帧:

month_perf = df.groupby(['Year', 'Month'])[['Close']].last()
month_perf['month_perf'] = month_perf.pct_change(periods=1)
month_perf = month_perf.reset_index()
month_perf.head()

输出:

   Year  Month  Close  month_perf
0  1997      8  92.59         NaN
1  1997      9  93.31    0.007776
2  1997     10  95.62    0.024756
3  1997     11  94.00   -0.016942
4  1997     12  98.09    0.043511

3]年度性能相同的东西,除了我们分组年份:

year_perf = df.groupby(['Year'])[['Close']].last()
year_perf['annual_perf'] = year_perf.pct_change(periods=1)
year_perf = year_perf.reset_index()
year_perf.head()

输出

   Year   Close  annual_perf
0  1997   92.59          NaN
1  1998   97.56     0.053678
2  1999  123.03     0.261070
3  2000  145.44     0.182151
4  2001  128.81    -0.114343

4]最后,我们合并了两个数据帧:

df_result = pd.merge(month_perf, year_perf, left_on='Year', right_on='Year')
print df_result.tail()

输出:

     Year  Month  Close_x  month_perf  Close_y  annual_perf
206  2014     10   194.35   -0.031205   182.92     0.252362
207  2014     11   201.77    0.038179   182.92     0.252362
208  2014     12   205.76    0.019775   182.92     0.252362
209  2015      1   205.43   -0.001604   205.43     0.123059
210  2015      2   201.92   -0.017086   205.43     0.123059