2017-12-18 15 views
0

Ich habe die folgende Situation: Ich habe einen Datenrahmen mit einer Spalte 'Revisionen', die als ein Wörterbuch mit mehreren anderen Wörterbüchern mit den Schlüsseln 'a' und 'b' formatiert ist. Die Revisionen gehören zur Schlüsselspalten-ID. Ich habe versucht, das Diktatformat zu entfernen. Daher wollte ich für jedes Subdictionary seine Werte zusammen mit den anderen Spalten des Datenrahmens auflisten. Die neuen Spalten sollten Sie dann den Namen der Tasten ('a' und 'b') erlassenDatenspalten gehen verloren nach der Verwendung von pd.concat

Anfängliche Datenrahmen:

id column2 (dict_column)        column3 
0 {{'a': 91125, 'b': 233}{'a': 955, 'b': 267}}  Marc 
1 {{'a': 91875, 'b': 455}{'a': 115, 'b': 267}}  Robert 
2 {{'a': 91955, 'b': 354}{'a': 255, 'b': 267}}  George 
3 {{'a': 91565, 'b': 987}}       Peter 
4 {{'a': 95925, 'b': 896}}       Hans 

Mein Ziel:

id a  b  column3 
0 91125 233  Marc 
0 955 267  Marc 
1 91875 455  Robert 
1 115 267  Robert 
2 91955 354  George 
2 255 267  George 
3 91565 987  Peter 
4 95925 896  Hans 

Nun, ich für ein gesuchtes Möglichkeit, das zu tun und eine nette solution mit pd.concat gefunden.

df = pd.concat([pd.DataFrame(x) for x in df['column2']],keys=df['id']).reset_index(level=1, drop=True).reset_index() 

Jetzt ist mein Problem ist, dass die ‚Spalte 3‘ verloren gehen und es gibt den folgenden Datenrahmen:

id a  b 
0 91125 233  
0 955 267  
1 91875 455  
1 115 267  
2 91955 354  
2 255 267  
3 91565 987  
4 95925 896   ´ 

Haben euch eine Idee, was ich falsch gemacht?

Vielen Dank vorzuzurücken,

Greetz

Antwort

0

Du die Serie column2 in einen Datenrahmen zu erweitern und dann den Datenrahmen zu df Neuzuordnung. Alles was innerhalb von pd.concat passiert, enthält keine Spalte3. Wenn Sie dieses Ergebnis also df zuweisen, verlieren Sie Spalte3. Der beste Weg, wie ich das lösen kann, besteht darin, die Erweiterung von column2 in eine neue Variable zu ordnen und dann wieder in df zusammenzuführen.

s = pd.concat([pd.DataFrame(x) for x in df['column2']],keys=df['id']).reset_index(level=1, drop=True).reset_index() 
new_df = s.merge(df[['id','column3']],on='id') 
Verwandte Themen