복붙노트

[PYTHON] 새로운 다중 색인 수준에서 팬더 열 연결

PYTHON

새로운 다중 색인 수준에서 팬더 열 연결

주어진 데이터 프레임 사전 :

dict = {'ABC': df1, 'XYZ' : df2}   # of any length...

각 데이터 프레임은 동일한 열과 유사한 인덱스를 갖습니다. 예를 들면 다음과 같습니다.

data           Open     High      Low    Close   Volume
Date                                                   
2002-01-17  0.18077  0.18800  0.16993  0.18439  1720833
2002-01-18  0.18439  0.21331  0.18077  0.19523  2027866
2002-01-21  0.19523  0.20970  0.19162  0.20608   771149

모든 데이터 프레임을 하나로 결합하는 가장 간단한 방법은 다음과 같습니다.

symbol         ABC                                       XYZ
data           Open     High      Low    Close   Volume  Open ...
Date                                                   
2002-01-17  0.18077  0.18800  0.16993  0.18439  1720833  ...
2002-01-18  0.18439  0.21331  0.18077  0.19523  2027866  ...
2002-01-21  0.19523  0.20970  0.19162  0.20608   771149  ...

몇 가지 방법을 시도했습니다. 예를 들어, 각 데이터 프레임에 대해 .from_product ([ 'ABC', columns])와 같은 다중 인덱스로 열을 대체 한 다음 축없이 축 1을 따라 연결합니다.

해결법

  1. ==============================

    1.당신은 concat (keys 인자는 계층 적 컬럼 인덱스를 생성 할 것입니다)로 그것을 할 수 있습니다 :

    당신은 concat (keys 인자는 계층 적 컬럼 인덱스를 생성 할 것입니다)로 그것을 할 수 있습니다 :

    d = {'ABC' : df1, 'XYZ' : df2}
    print pd.concat(d.values(), axis=1, keys=d.keys())
    
    
                    XYZ                                          ABC           \
                   Open     High      Low    Close   Volume     Open     High   
    Date                                                                        
    2002-01-17  0.18077  0.18800  0.16993  0.18439  1720833  0.18077  0.18800   
    2002-01-18  0.18439  0.21331  0.18077  0.19523  2027866  0.18439  0.21331   
    2002-01-21  0.19523  0.20970  0.19162  0.20608   771149  0.19523  0.20970   
    
    
                    Low    Close   Volume  
    Date                                   
    2002-01-17  0.16993  0.18439  1720833  
    2002-01-18  0.18077  0.19523  2027866  
    2002-01-21  0.19162  0.20608   771149
    

    정말로 concat은 목록을 원하므로 다음은 동일합니다.

    print(pd.concat([df1, df2], axis=1, keys=['ABC', 'XYZ']))
    
  2. ==============================

    2.데이터 프레임에 심볼 열을 추가하고 심볼 열을 포함하도록 인덱스를 설정하고 연결하여 해당 레벨을 언 스택합니다.

    데이터 프레임에 심볼 열을 추가하고 심볼 열을 포함하도록 인덱스를 설정하고 연결하여 해당 레벨을 언 스택합니다.

    다음은 사용자의 dict에 DataFrames만큼 많은 기호가 있다고 가정하고 dict 키의 순서에 따라 기호의 순서가 원하는지 확인합니다.

    DF_dict = {'ABC': df1, 'XYZ' : df2} 
    dict_keys = DF_dict.keys()
    symbols = ['ABC', 'ZXY']
    
    for x in xrange(len(symbols)):
        DF_dict[dict_keys[x]]['symbol'] = symbols[x]
        DF_dict[dict_keys[x]].reset_index(inplace = True)
        DF_dict[dict_keys[x]].set_index(['symbol', 'Date'], inplace = True)
    
    DF = pd.concat(DF_dict[df] for df in dict_keys)
    DF = DF.unstack('symbol')
    

    나는 그것이 내가 취할 접근법이라고 생각한다. 어떤 사람들은 내부 구문에 위배됩니다. 여기서는 편리함으로 만 사용합니다.

  3. from https://stackoverflow.com/questions/23600582/concatenate-pandas-columns-under-new-multi-index-level by cc-by-sa and MIT license