2014-10-21 4 views
0

현재 데이터베이스에서 결과로 팬더 데이터 프레임을 만들려고합니다.플랫 품목 /리스트를 팬더 데이터 프레임으로 변환하는 방법

(
("First", datetime.date(2014,10,5), 1.1), 
("First", datetime.date(2014,10,4), 1.2), 
("First", datetime.date(2014,10,3), 1.3), 
("First", datetime.date(2014,10,2), 1.4), 
("Second", datetime.date(2014,10,5), 2.1), 
("Second", datetime.date(2014,10,4), 2.2), 
("Second", datetime.date(2014,10,3), 2.3), 
("Second", datetime.date(2014,10,2), 2.4), 
("Third", datetime.date(2014,10,5), 3.1), 
("Third", datetime.date(2014,10,4), 3.2), 
("Third", datetime.date(2014,10,3), 3.3), 
("Third", datetime.date(2014,10,2), 3.4), 
) 

목적은, 행의 첫 번째 값 DF 열, 제 2 열 값 DF에 인덱스 될 수있을 것이다 : 그리고 데이터는 가장 효율적이처럼 보이는 DB에서 검색 세 번째 값은 값이됩니다. 예 :

      First  Second Third 
datetime.date(2014,10,5) 1.1  2.1  3.1 
datetime.date(2014,10,4) 1.2  2.2  3.2 
datetime.date(2014,10,3) 1.3  2.3  3.3 
datetime.date(2014,10,2) 1.4  2.4  3.4 

이 데이터를 빠르게 변환하는 방법에 대한 의견이 있으십니까? 나는 팬더에 처음이고, 조금 붙어 있습니다.

답변

2

df.pivot (인덱스 내로 열 값 (예를 들어 날짜)) 열로 열 값 (예를 들어, 첫 번째 열)을 이동할 수

import datetime as DT 
import pandas as pd 

data = [("First", DT.date(2014, 10, 5), 1.1), 
     ("First", DT.date(2014, 10, 4), 1.2), 
     ("First", DT.date(2014, 10, 3), 1.3), 
     ("First", DT.date(2014, 10, 2), 1.4), 
     ("Second", DT.date(2014, 10, 5), 2.1), 
     ("Second", DT.date(2014, 10, 4), 2.2), 
     ("Second", DT.date(2014, 10, 3), 2.3), 
     ("Second", DT.date(2014, 10, 2), 2.4), 
     ("Third", DT.date(2014, 10, 5), 3.1), 
     ("Third", DT.date(2014, 10, 4), 3.2), 
     ("Third", DT.date(2014, 10, 3), 3.3), 
     ("Third", DT.date(2014, 10, 2), 3.4), ] 

df = pd.DataFrame(data, columns=['cols', 'date', 'val']) 
df = df.pivot(columns='cols', index='date') 
df.columns = df.columns.droplevel(0) 

print(df) 

수율

cols  First Second Third 
date 
2014-10-02 1.4  2.4 3.4 
2014-10-03 1.3  2.3 3.3 
2014-10-04 1.2  2.2 3.2 
2014-10-05 1.1  2.1 3.1 
+0

우수! 피벗 내가 놓친 핵심 부분입니다. 감사! – MarkD

관련 문제