2013-06-19 60 views
2

我有一個關於pivot_table中列重新排列的問題。我想按月組列,但與安排如下:在pivot_table中安排列,Pandas

JAN  FEB 
X,Y,X/Y X,Y,X/Y .... 

的電流輸出爲:

JAN FEB  JAN FEB JAN ... 

X X ... Y  Y ... X/Y ... 

我noticied建設樞軸表時,在Excel中實現相同的行爲多列。

查看下面的示例。輸出具有第一種格式。 感謝

from pandas import DataFrame,pivot_table 
import numpy as np 
from datetime import datetime 

names=["a","b","c","a","b"] 
dates=["20/01/2013","21/01/2013","22/02/2013", "01/03/2013","01/03/2013"] 
dico={"x":[1,3,5,7,9], "y":[2,4,6,8,10], "date":dates, "name":names} 

df=DataFrame(dico) 
df["month"]=[datetime.strptime(x,'%d/%m/%Y').month for x in dates ] 

print df 
mpivot=pivot_table(df, values=["x","y"],cols=["month"], rows="name",aggfunc=np.sum) 
print mpivot 
+0

我添加了一個例子 – ryzhiy

+0

謝謝! (順便說一句,你可以使用pd.to_datetime(col,day_first = True)轉換爲日期時間:)) –

回答

4

你能做到這一點,一旦這個數據透視表已創建:

In [11]: p = pivot_table(df, values=["x","y"], cols=["month"], 
          rows="name", aggfunc=np.sum) 

In [12]: p 
Out[12]: 
     x   y 
month 1 2 3 1 2 3 
name 
a  1 NaN 7 2 NaN 8 
b  3 NaN 9 4 NaN 10 
c  NaN 5 NaN NaN 6 NaN 

首先由switching the column levels,然後sorting by columns

In [13]: p.reorder_levels([1, 0], axis=1).sort_index(axis=1) 
Out[13]: 
month 1  2  3 
     x y x y x y 
name 
a  1 2 NaN NaN 7 8 
b  3 4 NaN NaN 9 10 
c  NaN NaN 5 6 NaN NaN 
+0

太棒了!非常感謝。 – ryzhiy