2017-06-13 4 views
0

Ich habe ein Datenrahmen, die wie folgt aussieht:Umgestalten Pandas Datenrahmen für Seriendruck in Word

Customer ID  Invoice ID Invoice Total Customer Total 
8063863   110100456  41,47   248,82 
8063863   110100677  41,47   248,82 
8063863   110100838  41,47   248,82 
8063863   110101106  41,47   248,82 
8063863   110101259  41,47   248,82 
8063863   110101401  41,47   248,82 

Was ich haben möchte ist so etwas wie dieses:

Customer ID Invoice_1 Invoice_Total_1 Invoice_2 Invoice_Total_2 ... Customer_Total 
8063863  110100456    41,47 110100677    41,47   248,82 

Ich würde möchte dann den Dataframe nach csv exportieren und in Word zum Versenden der verschiedenen Clients deren Zusammenfassung verwenden.

Ich habe die Customer Total in Pandas mit pivot_table hinzugefügt, aber ich stecke auf der Abflachung des Dataframe fest.

+0

Hoffnung Link kann helfen https://stackoverflow.com/questions/34641615/concatenate-multiple-rows-to-one- single-row-in-pandas – Wen

+0

Vielen Dank! Ich werde das überprüfen. Schmelzen und Stapeln zu Rahmen sollte den Trick irgendwie machen. Ich werde sehen, ob ich dies mit einer einzigen eindeutigen Kunden-ID und dann mehreren arbeiten lassen kann. –

Antwort

1

Lassen Sie uns dies versuchen:

def f(x): 
    n,i = pd.factorize(x['Invoice ID']) 
    df1 = pd.DataFrame([x.loc[(x['Invoice ID']==i.values),'Invoice Total'].values], columns=(n+1).astype(str)).add_prefix('Invoice_Total_') 
    df2 = pd.DataFrame([i.values],columns=(n+1).astype(str)).add_prefix('Invoice_') 
    return pd.concat([df1,df2],axis=1).assign(Customer_Total=x['Customer Total'].max()),drop=True) 

df_out = df.groupby('Customer ID').apply(f).reset_index(-1,drop=True) 

Ausgang:

  Invoice_Total_1 Invoice_Total_2 Invoice_Total_3 Invoice_Total_4 \ 
Customer ID                 
8063863    41,47   41,47   41,47   41,47 

      Invoice_Total_5 Invoice_Total_6 Invoice_1 Invoice_2 Invoice_3 \ 
Customer ID                  
8063863    41,47   41,47 110100456 110100677 110100838 

      Invoice_4 Invoice_5 Invoice_6 Customer_Total 
Customer ID             
8063863  110101106 110101259 110101401   248,82 
+0

Danke für die Antwort, funktioniert wunderbar. Ich muss mein Verständnis von Pandas wirklich verbessern –

+0

Gern geschehen. –

Verwandte Themen