2017-03-16 7 views
-1

Ich bin excercising auf this offenen Datensatz. Die grundlegende Beschreibung der verwendeten Datenrahmen:Pandas/Python-Datenrahmen - Verloren in Merge-Logiken

Da ist eine, die Informationen über die Datenverfügbarkeit enthält: dataavail

Timestamp Availability 
201605252300 True 
201605252315 False 
201605252015 True 

Es ist eine, die die eigentlichen Daten enthält weatherdata

SquareID Timestamp Precipitation 
25  201605252300 1 

Die Sache ist, dass, wenn es ist keine regen, das ist nicht markiert durch weatherdata.Precipitation wird 0, aber durch s implizieren fehlt von weatherdata. Nicht alle fehlenden Daten bedeuten jedoch keine Niederschläge, sie können auch technisches Versagen bedeuten. Das ist, wo dataavail hereinkommt. Wenn für eine Timestamp in data die AvailabilityFalse ist, bedeutet das, dass es ein technisches Problem gab und es keine Daten gibt. Wenn für ein Timestamp in data die AvailabilityTrue ist, bedeutet, dass die Fällung war eigentlich 0.

ich diese beiden Datenrahmen verbinden will, so dass ich einen Datenrahmen beschreibt das volle Spektrum der Optionen, nämlich eine, die wie folgt aussieht:

Timestamp Availability Precipitation 
201605252300 True   1   #if the availability is True, and there's rain, data can be pulled from weatherdata 
201605252315 False  NaN   #if there's a technical issue, data can stay NaN for further imputation 
201605252015 True   0   #if the data's availability is True, but there's no entry fot it in weatherdata, it should be 0 

Nun, dies zu erreichen, ich versuche sich als

precip_alldata = pd.merge(weatherdata, dataavail, on=['Timestamp'], how='right') 

In meinem Verständnis zu verschmelzen, das die nach documentation sollte

rechts: nur Schlüssel von rechten Rahmen verwenden (SQL: rechte äußere Verknüpfung)

Aber das ist, was ich will, da in dataavail Verfügbarkeitsdaten für alle möglichen Zeitstempel gibt. Ich verstehe auch, dass dies NaNs noch nicht durch 0 ersetzt, wenn die Verfügbarkeit wahr ist. Die Ausgabe precip_alldata hat jedoch keine Zeilen, wobei AvailabilityTrue ist, aber Precipitation ist NaN, und das führt mich zu der Annahme, dass etwas in meinem Denken aus ist. Betrachtet man den Rohdatensatz, kann ich deutlich Gelegenheiten sehen, wo es keinen Niederschlag gab und der Avaiability ist True. Also meine Ausgabe sieht so etwas wie

Timestamp Availability Precipitation 
201605252300 True   1 
201605252315 False  Nan 

wo in meinem Verständnis/was ich will, ist

Timestamp Availability Precipitation 
201605252300 True   1 
201605252315 False  NaN 
201605252015 True   NaN 

in diesem ersten Schritt. Könntest du bitte auf den Schuldigen in meinem Denken hinweisen? Vielen Dank!

+0

tut etwas ändern, wenn Sie die Zusammenführung zu tun mit 'on = [ 'Timestamp', 'Niederschlag']'? – Khris

+0

@Khris - dies wird nicht funktionieren, da Niederschlag in beiden Datasets nicht existiert. –

Antwort

-1

Versuchen Sie Folgendes:

precip_alldata = pd.merge(dataavail, weatherdata, how='left') 
precip_alldata[['TimeStamp', 'Availability', 'Precipitation']] 

einen linken beitreten werden Sie alle Zeilen aus der linken Datenrahmen (dataavail) geben.

Ausgang:

  Timestamp Availability Precipitation 
0 201605252300   True   1.0 
1 201605252315  False   NaN 
2 201605252015   True   NaN 
+0

'precip_alldata = pd.merge (Datenavail, weatherdata, how = 'left')' ist wörtlich dasselbe wie 'precip_alldata = pd.merge (Wetterdaten, Datenavail, how = 'right')'. Trotzdem habe ich es versucht und es ergibt sich die gleiche Ausgabe. –

+2

Ich replizierte Ihre genauen Datensätze darüber, die die kopierte/eingefügte Ausgabe ergab, die Sie betrachten. Es läuft noch etwas anderes, wenn das nicht funktioniert. –