2017-10-24 9 views
0

以下の2つのデータフレームに左結合を適用しようとしています。パンダ:「左結合」が正しく機能しない

 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 

外れ値= pd.merge(外れ値、sum_Day、どのよう= '左'、left_on = [ '外れ値']、right_on = [ 'bikeid'])

外れ値= outliers.dropna(軸= 1、how = 'any')

trip_outlier day season 
0  11556.0 0  1 

上記のように、左結合を適用すると、上の結果を与えるすべてのNaN行が削除されました。しかし、所望の結果が

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

答えて

0

下に示されるべきであるように、outliersにおけるdtypeoutlierの列がフロートであると思われます。両方の結合列に同じdtypesが必要です。

ことによってそれを確認しますので、変換のためのastypeを使用

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

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

はEDIT:

outlier列内のいくつかのNaN sは、intに可能な変換最初にされていない場合必要な取り外しはNaN秒:

以下のコードを使用することになり、望ましい結果を得るために
outliers = outliers.dropna('outlier') 
outliers['outlier'] = outliers['outlier'].astype(int) 
+0

ありがとう!問題の原因となったデータ型です。 – WhiteSolstice

0

一つの方法:

outliers = outliers.merge(sum_Day.rename(columns={'bikeid': 'outlier'}), on = 'outlier', \ 
how = 'left') 
関連する問題