2016-09-14 194 views
1

我有一個數據框,我從一個組織糟糕的SQL表中拉出。這表有每個通道的唯一行 我可以提取這些信息爲Python數據幀,並打算做進一步的處理,但現在只希望它得到一個更可用的格式蟒蛇,熊貓,數據框,行到列

樣本輸入:

C = pd.DataFrame() 
A = np.array([datetime.datetime(2016,8,8,0,0,1,1000),45,'foo1',1]) 
B = pd.DataFrame(A.reshape(1,4),columns = ['date','chNum','chNam','value']) 
C = C.append(B) 
A = np.array([datetime.datetime(2016,8,8,0,0,1,1000),46,'foo2',12.3]) 
B = pd.DataFrame(A.reshape(1,4),columns = ['date','chNum','chNam','value']) 
C = C.append(B) 
A = np.array([datetime.datetime(2016,8,8,0,0,2,1000),45,'foo1',10]) 
B = pd.DataFrame(A.reshape(1,4),columns = ['date','chNum','chNam','value']) 
C = C.append(B) 
A = np.array([datetime.datetime(2016,8,8,0,0,2,1000),46,'foo2',11.3]) 
B = pd.DataFrame(A.reshape(1,4),columns = ['date','chNum','chNam','value']) 
C = C.append(B) 

主要生產

       date chNum chNam value 
0 2016-08-08 00:00:01.001000 45 foo1  1 
0 2016-08-08 00:00:01.001000 46 foo2 12.3 
0 2016-08-08 00:00:02.001000 45 foo1 10 
0 2016-08-08 00:00:02.001000 46 foo2 11.3 

我想

        date foo1  foo2 
2016-08-08 00:00:01.001000   1  12.3 
2016-08-08 00:00:02.001000   10 113 

我有一個解決方案:製作一個唯一的日期列表,爲每個日期循環遍歷數據框,並拉出每個通道,創建一個新行。一種乏味(容易出錯)!到程序,所以我在想,如果有利用大熊貓工具

回答

2

使用​​更好的方法,然後unstack轉動

C.set_index(['date', 'chNum', 'chNam'])['value'].unstack(['chNam', 'chNum']) 

enter image description here


爲了讓你問究竟什麼

C.set_index(['date', 'chNam'])['value'].unstack().rename_axis(None, 1) 

enter image description here