2016-09-14 5 views
1

불완전하게 구성된 SQL 테이블에서 가져온 데이터 프레임이 있습니다. 그 표는 모든 채널에 대해 고유 한 행이 내가 파이썬 dataframe에 그 정보를 추출하고, 추가 처리를 할 의도지만, 지금은 단지 더 사용할 수있는 형식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

사용 set_index을 판다 도구를 활용하는 더 좋은 방법이 있다면 프로그램으로, 그래서 나는 다음 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

관련 문제