2017-07-27 4 views
0

Okay, ich kann nicht scheinen, die Lösung zu finden, so hier ist meine Frage. Ich würde es sehr begrüßen, wenn jemand aus der stackoverflow-Community bald eine Lösung vorschlagen könnte, da ich die Ergebnisse einreichen muss.Verketten Zwei CSV-Dateien oder Datenrahmen unter einer bestimmten Bedingung

Ich habe zwei csv-Dateien (kann als Datenframes geladen werden). Eine CSV-Datei enthält 1458644 Zeilen und 12 Spalten mit allen Zeileneinträgen, die Ereignisse für die Dauer von 6 Monaten bis zu den Sekunden von mehreren Tagen angeben.

Die andere CSV-Datei mit den Wetterdaten hat 4432 Einträge, mit den Wetterdaten eines jeden Tages mit der Stunde angegeben (nicht hier Sekunden Dauer) von 6 Monaten

Was will ich die Einträge tun kombinieren beide Dateien unter Verwendung einer Python-Operation (oder verketten mit der Bedingung), so dass die Daten aus dem Stundeneintrag des zweiten Datenrahmens zu dem ersten Datenrahmen hinzugefügt werden, die Einträge für eine einzelne Stunde (spezifiziert in dem zweiten Datenrahmen) dupliziert und wiederholt werden die einzelne Stunde des ersten Datenrahmens

z

Erste Datenrahmen

Date:      col1, cl2, 
1/2/2013 12:05:00   yyy etc. 
1/2/2013 12:12:00   yyy 
1/2/2013 13:13:00   yyy 
1/2/2013 14:14:00   yyy 
1/2/2013 14:30:00   yyy 
1/2/2013 14:45:00   yyy 
1/2/2013 17:00:00   yyy 
1/2/2013 17:17:00   yyy 
1/2/2013 17:30:00   yyy 
1/2/2013 18:17:00   yyy 
1/2/2013 18:30:00   yyy 

2. Datenrahmen

Date      col3 col4 
1/2/2013 12:00:00   xxx overcast 
1/2/2013 13:00:00   xxx overcast 
1/2/2013 14:00:00   xxx sunny 
1/2/2013 15:00:00   xxx sunny 
1/2/2013 16:00:00   xxx rain 
1/2/2013 17:00:00   xxx rain 
1/2/2013 18:00:00   xxx cloudy 

Das Endergebnis wie folgt aussehen sollte:

Date:      col1, col2, col3, col4 
1/2/2013 12:05:00   yyy etc. xxx overcast 
1/2/2013 12:12:00   yyy   xxx overcast 
1/2/2013 13:13:00   yyy   xxx overcast 
1/2/2013 14:14:00   yyy   xxx sunny 
1/2/2013 14:30:00   yyy   xxx sunny 
1/2/2013 14:45:00   yyy   xxx sunny 
1/2/2013 17:00:00   yyy   xxx rain 
1/2/2013 17:17:00   yyy   xxx rain 
1/2/2013 17:30:00   yyy   xxx rain 
1/2/2013 18:17:00   yyy   xxx cloudy 
1/2/2013 18:30:00   yyy   xxx cloudy 
+0

Also für jeden Datensatz/Zeile in frame1 Sie die gleiche Stunde in frame2 nachzuschlagen, und seine colunms ? Und es gibt eine variable Anzahl von Übereinstimmungen zwischen 1 und 2. – hpaulj

Antwort

-2

denke ich Sie nicht Python benötigen dieses Problem zu beheben . Sie können den Befehl "vlookup()" von Excel verwenden, um dieses Problem zu lösen. 1. Verbergen Sie die erste Spalte der beiden CSV-Dateien. 2. Verwenden Sie Split-Funktion, um die Stunden zu erhalten. 3. Verwenden Sie den Befehl "vlookup", um zwei Daten zu kombinieren.

Hoffnung kann Ihnen helfen,

+1

Es gibt viele Gründe, Python gegenüber Excel für diese Art der Datenverarbeitung vorzuziehen. – asongtoruin

+0

Ok, Sie haben alle Recht. aber die Verwendung von Python trifft auf das gleiche Problem. Große Dateien benötigen viel Pufferspeicherplatz. Wie man mit diesem Problem umgeht. –

+0

@BaoLiwen Wenn Sie mit großen Dateien in Pandas arbeiten, können Sie die Daten in Blöcken lesen, die Ihnen je nach Situation helfen können, solche Probleme zu umgehen. Andernfalls sind möglicherweise Datenbanken erforderlich. – asongtoruin

2

Wenn wir richtige Datetimes konvertieren, das ist ziemlich einfach:

df1['Date'] = pd.to_datetime(df1['Date']) 
df2['Date'] = pd.to_datetime(df2['Date']) 

df1['Hour'] = pd.DatetimeIndex(df1['Date']).floor('h') 

combined = df1.merge(df2, left_on='Hour', right_on='Date', how='left', 
        suffixes=('', '_r')) 
combined.drop(['Hour', 'Date_r'], axis=1, inplace=True) 
+0

Verdammt, Danke Mann, es hat wie ein Zauber funktioniert. Es scheint auch einige Zeilen zu geben, die vollständig aus dem RIGHT (df2) Datenrahmen in der kombinierten Datei fehlen. Ich habe den 2. Datenrahmen überprüft, es gibt einige Spalten mit fehlenden Werten, aber nicht ganz die Zeileneinträge des zweiten Datenrahmens sind leer. Irgendeine Idee, was könnte das verursachen !! –

+0

@Jon_Snow_ froh zu helfen. Ich bin mir nicht sicher, was Sie meinen - sagen Sie, dass einige der Datumsangaben nicht korrekt konvertiert sind? – asongtoruin

+0

Nein, ich meine die Einträge des zweiten Datenrahmens in der kombinierten Datei fehlen in einigen Zeilen vollständig gegen die Einträge des ersten Datenrahmens. Wie df1 hat Werte in dieser Zeile, aber df2 Werte überhaupt nicht vorhanden sind Ich denke, die Datumsangaben sind richtig konvertiert, aber es gibt ein paar Fälle, in denen die Konvertierung, scheint es von 2. df ist fehlgeschlagen. Ein Eintrag, z.B. fehlt um 12:00 in datetime der kombinierten Datei. Ich habe df2 eingecheckt, die Werte für diese Stunde sind vorhanden. –

Verwandte Themen