2016-07-27 212 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