2017-10-24 1 views
0

Ich versuche linker Join auf die beiden unten gezeigten Datenrahmen anzuwenden.Pandas: "Left Join" funktioniert nicht richtig

 outlier day season 
0  11556.0 0  1 
========================================== 
    date bikeid  date2 
0  1 16736 2016-06-06 
1  1 16218 2016-06-13 
2  1 15254 2016-06-20 
3  1 16327 2016-06-27 
4  1 17745 2016-07-04 
5  1 16975 2016-07-11 
6  1 17705 2016-07-18 
7  1 16792 2016-07-25 
8  1 18540 2016-08-01 
9  1 17212 2016-08-08 
10  1 11556 2016-08-15 
11  1 17694 2016-08-22 
12  1 14936 2016-08-29 

Ausreißern = pd.merge (Ausreißern, sum_Day, wie = 'links', left_on = [ 'Ausreißer'], right_on = [ 'bikeid'])

Ausreißern = outliers.dropna (Achse = 1, wie = ‚any‘)

trip_outlier day season 
0  11556.0 0  1 

wie nach oben gezeigt links Anwendung kommen i alle NaN Reihen fallen gelassen, die über das Ergebnis gibt. Allerdings sind die gewünschten Ergebnisse sollten

trip_outlier day season  date2 
0  11556.0 0  1 2016-08-15 

Antwort

0

wie unten dargestellt werden Es scheint dtype von outlier Spalte in outliers Schwimmer ist. Brauchen Sie gleiche dtypes in beiden verbundenen Spalten.

Prüfen Sie es nach:

print (outliers['outlier'].dtype) 
print (sum_Day['bikeid'].dtype) 

So astype verwenden für convert:

outliers['outlier'] = outliers['outlier'].astype(int) 
#if not int 
#sum_Day['bikeid'] = sum_Day['bikeid'].astype(int) 

EDIT:

Wenn einige NaN s in outlier Spalte int nicht möglich convert ist, zuerst ist notwendig entfernen NaN s:

outliers = outliers.dropna('outlier') 
outliers['outlier'] = outliers['outlier'].astype(int) 
+0

Dank! Es war der Datentyp, der das Problem verursachte. – WhiteSolstice

0

Eine Möglichkeit, das gewünschte Ergebnis zu erhalten wäre, den Code unten verwenden:

outliers = outliers.merge(sum_Day.rename(columns={'bikeid': 'outlier'}), on = 'outlier', \ 
how = 'left')