2017-06-30 1 views
1

Ich habe zwei Tabellen sie Datenrahmen Objekte (Pandas), wie unten gesehen:eine Tabelle in Python Pandas Umstrukturierung

Table 1   Table 2 
col1 col2 col3  col1 col2 col3 
    A |a1| 1  A |b1| 2 
     |a2| 3   |b2| 1 
     |a3| 2  B |b1| 1 
    B |a1| 1   |b2| 2 
     |a2| 5  C |b1| 2 
    C |a1| 0   |b2| 0  
     |a2| 3 
     |a3| 4 

ich so etwas schaffen wollen:

a1 a2 a3 b1 b2 
A 1 3 2 2 1 
B 1 5 0 1 2 
C 0 3 4 2 0 

Antwort

2

Ich glaube, Sie müssen pandas.concat mit DataFrame.unstack:

df1 = pd.DataFrame({'col3': [1, 3, 2, 1, 5, 0, 3, 4], 
        'col2': ['a1', 'a2', 'a3', 'a1', 'a2', 'a1', 'a2', 'a3'], 
        'col1': ['A', 'A', 'A', 'B', 'B', 'C', 'C', 'C']}) 
df1 = df1.set_index(['col1','col2']) 
print (df1) 
      col3 
col1 col2  
A a1  1 
    a2  3 
    a3  2 
B a1  1 
    a2  5 
C a1  0 
    a2  3 
    a3  4 

df2 = pd.DataFrame({'col3': [2, 1, 1, 2, 2, 0], 
        'col2': ['b1', 'b2', 'b1', 'b2', 'b1', 'b2'], 
        'col1': ['A', 'A', 'B', 'B', 'C', 'C']}) 
df2 = df2.set_index(['col1','col2']) 
print (df2) 
      col3 
col1 col2  
A b1  2 
    b2  1 
B b1  1 
    b2  2 
C b1  2 
    b2  0 

df = pd.concat([df1, df2])['col3'].unstack(fill_value=0) 
print (df) 
col2 a1 a2 a3 b1 b2 
col1     
A  1 3 2 2 1 
B  1 5 0 1 2 
C  0 3 4 2 0 

Last bei Bedarf Spalten entfernen, Indexnamen hinzufügen rename_axis:

df = pd.concat([df1, df2])['col3'] \ 
     .unstack(fill_value=0) \ 
     .rename_axis(None) \ 
     .rename_axis(None, axis=1) 
print (df) 
    a1 a2 a3 b1 b2 
A 1 3 2 2 1 
B 1 5 0 1 2 
C 0 3 4 2 0 
Verwandte Themen