2016-06-29 16 views
3

Es gab viele ähnliche Fragen, aber keine speziell dazu.Eine Liste von Pandas Datenrahmen zusammenführen

Ich habe eine Liste von Datenrahmen und ich muss sie zusammen mit einer eindeutigen Spalte (date) zusammenführen. Feldnamen sind unterschiedlich, also ist concat out.

Ich kann df[0].merge(df[1],on='Date').merge(df[3],on='Date) usw. manuell verwenden, um jedes df eins nach dem anderen zusammenzuführen, aber das Problem ist, dass die Anzahl der Datenrahmen in der Liste mit Benutzereingaben unterschiedlich ist.

Gibt es eine Möglichkeit zum Zusammenführen, die alle Datenrahmen in einer Liste auf einmal kombiniert? Oder vielleicht einige für In-Schleife bei tut das?

Ich benutze Python 2.7.

Antwort

18

Sie reduce Funktion nutzen zu können, wo dfList Ihre Liste von Datenrahmen ist:

import pandas as pd 
reduce(lambda x, y: pd.merge(x, y, on = 'Date'), dfList) 

Als Demo:

df = pd.DataFrame({'Date': [1,2,3,4], 'Value': [2,3,3,4]}) 
dfList = [df, df, df] 
dfList 

# [ Date Value 
# 0  1  2 
# 1  2  3 
# 2  3  3 
# 3  4  4, Date Value 
# 0  1  2 
# 1  2  3 
# 2  3  3 
# 3  4  4, Date Value 
# 0  1  2 
# 1  2  3 
# 2  3  3 
# 3  4  4] 

reduce(lambda x, y: pd.merge(x, y, on = 'Date'), dfList) 
# Date Value_x Value_y Value 
# 0 1  2  2  2 
# 1 2  3  3  3 
# 2 3  3  3  3 
# 3 4  4  4  4 
+1

wow ... Dank! Ich verstehe nie wirklich, was Lambda ist. Sieht nach seiner Zeit aus, um darüber nachzulesen! – Jake

+0

Nur um es zu erwähnen. map() oder listcomprehension würde auch funktionieren. Für die Geschwindigkeit würde ich zuerst alles in dict umwandeln und dann nur einen Datenrahmen daraus erstellen. – PlagTag

+0

Danke dafür. Wenn ich es laufe, gehe ich von 167428 Zeilen x 85 Spalten zu 0 Zeilen × 29233 Spalten - irgendwelche Ideen, warum das sein könnte? – Maverick

Verwandte Themen