2017-09-25 6 views
0

私がやろうとしていることは、ピボットテーブルを別のデータフレームに結びつけることです。 A1:A4は異なる場所を示す列です。したがって、ピボットテーブルの値は、A1またはA3などのインスタンスの数を表します。Python pandas dfを別のdfにマッピングする

私は1つのデータフレームと1つのピボットテーブルを持っています。データフレーム(DF1)は次のようになります。

SubscriberKey Inst A1 A2 A3 A4 
     'abc'  2  0 0  0 0 
     'bcd'  4  0 0  0 0 
     'cde'  1  0 0  0 0 
     'def'  0  0 0  0 0 
     'efg'  0  0 0  0 0 

私のピボットテーブル(PT1)は次のようになります。これはピボットテーブルであるため、マルチレベルの列見出しもあります。マルチレベル列見出しの意味を明確にするために、単一の列見出し出力( 'インスタンス'、 'A1')があります。とにかく以下の私のピボットテーブル(PT1)のスナップショットです:

 Subscriber Key Instance Instance Instance Instance 
     Linkname  A1  A2  A3  A4 
     'abc'   2   0  2  0 
     'bcd'   4   1  1  2 
     'cde'   1   1  0  0 

私は何とか私のDFのA1を投入したいと思います:A4の列がピボットにあるものに基づきます。 dfにはピボットテーブルよりも多くの加入者キーが含まれているため、行数は同じではありません。

出力は次のようになります。

SubscriberKey Inst A1 A2 A3 A4 
     'abc'  2  0 0 2 0 
     'bcd'  4  0 1 1 2 
     'cde'  1  1 0 0 0 
     'def'  0  0 0 0 0 
     'efg'  0  0 0 0 0 

すべてのヘルプは高く評価され、感謝!私はすでにdf1.update(pt1 [column])を試して、 '型エラー:期待されたタプル、strを返しました'を返します。

答えて

1

更新が有効です。これを試してみてください:

df1 = df1.set_index('SubscriberKey') 
df1 


Output:    
      Inst A1 A2 A3 A4 
SubscriberKey     
'abc'   1 0 0 0 0 
'bcd'   2 0 0 0 0 
'cde'   1 0 0 0 0 
'def'   3 0 0 0 0 
'efg'   0 0 0 0 0 

df2 = df2[1:] 
df2.columns = ["SubscriberKey","A1","A2","A3","A4"] 
df2 = df2.set_index('SubscriberKey') 



Output: 
       A1 A2 A3 A4 
SubscriberKey    
'abc'   1 0 2 0 
'bcd'   0 1 1 2 
'cde'   1 1 0 0 

次にやって:

df1.update(df2) 
df1 

与える:

   Inst A1 A2 A3 A4 
SubscriberKey     
'abc'   1 1 0 2 0 
'bcd'   2 0 1 1 2 
'cde'   1 1 1 0 0 
'def'   3 0 0 0 0 
'efg'   0 0 0 0 0 
+0

こんにちは、私はdf2 = df2 [1:]を使用すると、列の表示方法を正しく表示するように更新しました。実際には最初の行が切り捨てられ、列ヘッダーは切り捨てられません。 – user6749426

+0

働いた!ありがとうございました!! – user6749426

+0

完了しました!ありがとうございました – user6749426

1
df[['SubscriberKey','Inst']].join(pt1.set_index('Linkname'), on='SubscriberKey') 

これは同様にあなたはマルチレベルのインデックスに対処した後に動作します。それに対処するにはいくつかの方法があります。私は通常、単に.reset_index()を使用します。

関連する問題