2016-07-27 177 views
4

你好,并提前感谢任何帮助。我有一个简单的两列数据框。我没有明确地设置索引,但我相信一个数据帧会得到一个整数索引,我在输出的左侧看到这个索引。下面的问题:熊猫枢轴时间序列年份

df = pandas.DataFrame(res) 
df.columns = ['date', 'pb'] 
df['date'] = pandas.to_datetime(df['date']) 
df.dtypes 

date datetime64[ns] 
pb    float64 
dtype: object 


date pb 
0 2016-04-01 24199.933333 
1 2016-03-01 23860.870968 
2 2016-02-01 23862.275862 
3 2016-01-01 25049.193548 
4 2015-12-01 24882.419355 
5 2015-11-01 24577.000000 


date datetime64[ns] 
pb    float64 
dtype: object 

我想转动数据框,让我有多年在顶部(列):2016年,2015年等 和每月一排:1 - 12

回答

5

使用.dt accessor你可以在那些创建年份和月份列,然后转动:

df['Year'] = df['date'].dt.year 
df['Month'] = df['date'].dt.month 
pd.pivot_table(df,index='Month',columns='Year',values='pb',aggfunc=np.sum) 

或者,如果你不希望这些其他列,你可以这样做:

pd.pivot_table(df,index=df['date'].dt.month,columns=df['date'].dt.year, 
       values='pb',aggfunc=np.sum) 

随着我的虚拟数据集生产:

Year    2013  2014  2015  2016 
date 
1    92924.0 102072.0 134660.0 132464.0 
2    79935.0 82145.0 118234.0 147523.0 
3    86878.0 94959.0 130520.0 138325.0 
4    80267.0 89394.0 120739.0 129002.0 
5    79283.0 91205.0 118904.0 125878.0 
6    77828.0 89884.0 112488.0 121953.0 
7    78839.0 94407.0 113124.0  NaN 
8    79885.0 97513.0 116771.0  NaN 
9    79455.0 99555.0 114833.0  NaN 
10   77616.0 98764.0 115872.0  NaN 
11   75043.0 95756.0 107123.0  NaN 
12   81996.0 102637.0 114952.0  NaN 
+0

这工作绝对好吃。我感谢您的帮助! –

+1

df.pivot_table(index ='month',columns ='year',values ='pb') –

+0

很好的回答! +1 – piRSquared

2

使用的stack代替pivot

df = pd.DataFrame(
     dict(date=pd.date_range('2013-01-01', periods=42, freq='M'), 
       pb=np.random.rand(42))) 

df.set_index([df.date.dt.month, df.date.dt.year]).pb.unstack() 

enter image description here

+0

我还没有完全掌握堆叠和垛堆。谢谢你的这个例子。 – bernie