2016-09-14 11 views
1

私は、構成の悪いSQLテーブルから取得したデータフレームを持っています。そのテーブルは、すべてのチャネルのためのユニークな行を持つ 私はPythonのデータフレームにその情報を抽出し、さらに処理を行うつもりが、今のためだけに、より使用可能な形式python、pandas、dataframe、rows to columns

サンプル入力にそれを取得したいことができます:

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