2016-08-09 3 views
1

상황에 따라 여러 필드가있는 다양한 주식에 대한 time_series 데이터가있는 파일이 몇 개 있습니다. 각 파일이데이터 프레임에 다중 열 인덱스를 적용한 팬다

time, open, high, low, close, volume 

목표는 내가

fields = ['time','open','high','low','close','volume','numEvents','value'] 
midx = pd.MultiIndex.from_product([security_name'], fields], names=['security', 'field']) 

및 시작에 대한 multiindex을 만들어

field  open        high       ... 
security hk_1  hk_2  hk_3 ...  hk_1  hk_2  hk_3 ... ... 
time 
t_1  open_1_1 open_2_1 open_3_1 ... high_1_1 high_2_1 high_3_1 ... ...    
t_2  open_1_2 open_2_2 open_3_2 ... high_1_2 high_2_2 high_3_2 ... ... 
...  ...  ...  ... ...  ...  ...  ... ... ... 

형태 중 하나 dataframe에 모든 것을 얻을 수 있습니다 포함되어 있음을 적용하려 새로운 데이터 프레임을 만들고 인덱스를 추가하여 CSV에서 데이터를 읽음으로써 얻을 수있는 데이터 프레임에 멀티 인덱스 제공

나는 인덱스는 (나중에 다른 모든 다른 dataframes에 가입 할 수 있도록 있는지 확인하려고하지만

그러나, 새로운 dataframe는, 또한, 여전히 시간 동안 열을 포함

security 1_HK 
field  time open high low  close volume 
time         
NaN   NaN  NaN  NaN NaN  NaN  NaN 

유모를 포함 집계 된 데이터 프레임을 얻기 위해 인덱스 별 주식).

어떻게 내 데이터 손실없이 dataframe에 multiindex을 적용 할 수 있습니다 다음 나중에

field  time    open high  ... 
security 1_HK 2_HK ... 1_HK 2_HK ... ... 
time 
(전환 계층 구조 필드와 보안에주의) 같은 것을 만들려면이

security 1_HK 
field  time open high low  close volume 
time 

처럼 보이는 dataframes 가입

답변

1

먼저 모든 파일을 files 목록으로 가져온 다음 목록 이해로 모든 DataFrames와 concat(axis=1) 열로 가져올 수 있습니다. 매개 변수 keys를 추가하는 경우, 당신은 열 Multiindex을 얻을 :

파일 :

a.csv, b.csv, c.csv

import pandas as pd 
import glob 

files = glob.glob('files/*.csv') 
dfs = [pd.read_csv(fp) for fp in files] 

eqty_names_list = ['hk1','hk2','hk3'] 
df = pd.concat(dfs, keys=eqty_names_list, axis=1) 

print (df) 
    hk1  hk2  hk3  
    a b c a b c a b c 
0 0 1 2 0 9 6 0 7 1 
1 1 5 8 1 6 4 1 3 2 

마지막 필요 swaplevelsort_index :

df.columns = df.columns.swaplevel(0,1) 
df = df.sort_index(axis=1) 
print (df) 
    a   b   c   
    hk1 hk2 hk3 hk1 hk2 hk3 hk1 hk2 hk3 
0 0 0 0 1 9 7 2 6 1 
1 1 1 1 5 6 3 8 4 2 
+0

감사합니다. 그것은 아름답게 작동합니다. 이것을보고있는 누군가를위한 노트; 파일의 순서는 다음과 같이 데이터를 읽으면 eqty_names_list의 순서와 일치해야합니다. – chrise

+0

네, 맞습니다. 받아 들여 주셔서 감사합니다! – jezrael

관련 문제