2017-09-25 4 views
0

was ich versuche zu tun ist, verwenden Sie die Map-Funktion, um eine Pivot-Tabelle an einen anderen Datenrahmen zu binden. A1: A4 sind Spalten, die einen anderen Ort bezeichnen. Der Wert in der Pivot-Tabelle stellt also die Anzahl der Instanzen bei A1 oder A3 usw. dar.Python pandas map mehrstufige Spaltenüberschrift df zu einem anderen df

Ich habe einen Datenrahmen und eine Pivot-Tabelle. Der Datenrahmen (df1) sieht so aus:

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 

Meine Pivot-Tabelle (pt1) sieht so aus. Es hat auch eine mehrstufige Spaltenüberschrift, da es sich um eine Pivot-Tabelle handelt. Um zu verdeutlichen, was ich mit der mehrstufigen Spaltenüberschrift meine, wird eine einzelne Spaltenüberschrift ausgegeben ('Instance', 'A1'). Sowieso ist eine Momentaufnahme meiner Pivot-Tabelle (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 

würde ich irgendwie mag meinen df des A1 bevölkern: A4 Spalten auf, was in der Pivot ist. Das df hat mehr Teilnehmerschlüssel als die Pivot-Tabelle enthält und daher sind die Zeilenzahlen nicht gleich.

Die Ausgabe würde wie folgt aussehen:

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 

Jede Hilfe ist willkommen, danke! Ich habe bereits versucht df1.update (pt1 [Spalte]) und es gibt 'Type Error: erwartet Tupel, bekam str'

Antwort

1

Update sollte funktionieren. Versuchen Sie folgendes:

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 

Dann tun:

   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

Hallo aktualisiert mein zweites Datenformat, um richtig zu zeigen, wie die Spalten angezeigt werden - wenn ich df2 = df2 [1:] verwende, schneidet es tatsächlich meine erste Zeile und nicht die Spaltenüberschrift – user6749426

+0

es hat funktioniert! Danke!! – user6749426

+0

Fertig und fertig! Danke nochmal – user6749426

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

Dies funktioniert auch, wenn Sie mit dem Multi-Level-Index beschäftigen:

df1.update(df2) 
df1 

die gibt. Es gibt eine Reihe von Möglichkeiten, damit umzugehen. Ich verwende normalerweise nur .reset_index()

Verwandte Themen