2017-12-14 8 views
2

私はPandasを初めて使い、非正規化フラットデータセットを作成しようとしており、それが可能かどうかを判断したいと考えています。概念的には単一の列( 'PID')に結合できる2つのデータフレーム(親と子)から始めます。ここでpandasデータフレームデータセットの行を折りたたみます

は、親データフレームである:ここで

parentData = [(1,’A’,100), (2,’B’,200)] 
parentCols = [‘PID’, ‘PATTR1’, ‘PATTR1’] 
parentDf = pd.DataFrame.from_records(parentData, columns=parentCols) 

Parent Dataframe 
    PID PATTR1 PATTR2 
0  1  A  100 
1  2  B  200 

は、子データフレームです:

childData = [(201,1,’AA’,2100), (202,2,’BB’,2200), (203,2,’CC’,2300)] 
childCols = [‘CID’, ‘PID’, ‘CATTR1’, ‘CATTR1’] 
childDf = pd.DataFrame.from_records(childData, columns=childCols) 

Child Dataframe 
    CID PID PATTR1 PATTR2 
0 201 1  AA 2100 
1 202 2  BB 2200 
2 203 2  CC 2300 

はここで、親と子のマージです:

mergedDf = parentDf.merge(childDf, left_on=’PID’, right_on=’PID’, how=’outer’) 

Parent merged with Child dataframe 
    PID PATTR1 PATTR2 CID CATTR1 CATTR2 
0  1  A  100 201  AA 2100 
1  2  B  200 202  BB 2200 
2  2  B  200 203  CC 2300 

そして、ここでは何ですか望ましい出力は次のとおりです。

      | ????     | ???? 
    PID PATTR1 PATTR2 | CID CATTR1 CATTR2 | CID CATTR1 CATTR2 
0  1  A  100 | 201  AA 2100 | 
1  2  B  200 | 202  BB 2200 | 203  CC 2300 

Pandas APIドキュメントのマージ、再形成な​​どのセクションを検索して読み込んだ後、希望する出力が可能かどうかはわかりませんでした。

事前にアドバイスや助力をいただき、ありがとうございます。

答えて

1

あなたがmergedDfを取得した後、我々は新しいパラ「G」を作成し、unstackを使用して(PS:これは幅広い質問に長い)の助けを

mergedDf.assign(G=mergedDf.groupby('PID').cumcount())\ 
    .set_index(['PID','PATTR1','PATTR2','G'])\ 
     .unstack().swaplevel(0,1,1)\ 
       .sort_index(1,level=0) 
Out[218]: 
G      0      1    
        CATTR1 CATTR2 CID CATTR1 CATTR2 CID 
PID PATTR1 PATTR2            
1 A  100  AA 2100.0 201.0 None  NaN NaN 
2 B  200  BB 2200.0 202.0  CC 2300.0 203.0 
+0

おかげで、これは私がまさに必要でした! – azw

+0

@azw yw :-)、ハッピーコーディング – Wen

関連する問題