2016-09-14 163 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