2016-05-09 9 views
1

私はあるデータフレームの値は、別のデータフレームのビンにありますか?

> data 

    loc_x   loc_y 
    -15   25 
    30   35 
    5   -45 
    -135   -200 

...私はこのようになりますデータと呼ばれる別のデータフレームを持っている...

> loc_df 

loc_x_bin  loc_y_bin  
(-20, -10]  (0, 50]   
(-140, -130]  (100, 150]   
(0, 10]   (-50, 0]   

を次のようになりますビンの2列のloc_dfという名前のデータフレームを持って、私がしたいですloc_xloc_x_binの値内にあり、loc_yの値がデータフレームloc_dfloc_y_binの範囲内にあるかどうかを示すデータで新しいブール型列を作成します。 loc_xloc_yは、同じ行のloc_x_binloc_y_binである必要があります。例えば:

> data 

loc_x   loc_y   in_bins 
    -15    25    true 
    30    35    false 
    5    -45    true 
    -135   -200   false 
    5    25    false** 

UPDATE ** 5(0,10] loc_x_bin及び25内にあるが、私が望むように(0、50] loc_y_binloc_x_binloc_y_binが同じ行にない範囲内でありますこれは虚偽であることを

+0

何でありますか'loc_df'のオブジェクト?それらの文字列ですか? ''(-20、-10) '' – piRSquared

+0

これらはカテゴリ – Hound

+0

で、' type(loc_df.iloc [0、0]) 'を実行して返事を返します – piRSquared

答えて

1

アップデート2:あなたはは両方xydf_loc(またはで同じ行からのビンに属していることを確認したい場合10):

xstep = 10 
ystep = 50 

In [201]: (df.assign(bin=(pd.cut(df.loc_x, np.arange(-500, 500, xstep)).astype(str) 
    .....:     + 
    .....:     pd.cut(df.loc_y, np.arange(-500, 500, ystep)).astype(str) 
    .....:    ) 
    .....:   ) 
    .....:)['bin'].isin(df_loc.sum(axis=1)) 
Out[201]: 
0  True 
1 False 
2  True 
3 False 
4 False 
Name: bin, dtype: bool 

説明:

In [202]: (df.assign(bin=(pd.cut(df.loc_x, np.arange(-500, 500, xstep)).astype(str) 
    .....:     + 
    .....:     pd.cut(df.loc_y, np.arange(-500, 500, ystep)).astype(str) 
    .....:    ) 
    .....:   ) 
    .....:) 
Out[202]: 
    loc_x loc_y      bin 
0 -15  25   (-20, -10](0, 50] 
1  30  35   (20, 30](0, 50] 
2  5 -45   (0, 10](-50, 0] 
3 -135 -200 (-140, -130](-250, -200] 
4  5  25   (0, 10](0, 50] 

In [203]: df_loc.sum(axis=1) 
Out[203]: 
0   (-20, -10](0, 50] 
1 (-140, -130](100, 150] 
2   (0, 10](-50, 0] 
dtype: object 

UPDATE:

あなたは xloc_x_binyに属しているかどうかを確認したい場合は loc_y_bin(必ずしも df_locの同じ行から)に属しています

df_loc.dtypesに両方の列のcategoryが表示されない場合は、c最初category DTYPEにごカテゴリーonvert:

df_loc.loc_x_bin = df_loc.loc_x_bin.astype('category') 
df_loc.loc_y_bin = df_loc.loc_y_bin.astype('category') 

あなたはdf "フライ上" であなたのコラムを分類することができます

xstep = 10 
ystep = 50 

df['in_bins'] = ( (pd.cut(df.loc_x, np.arange(-500, 500, xstep)).isin(df_loc.loc_x_bin)) 
        & 
        (pd.cut(df.loc_y, np.arange(-500, 500, ystep)).isin(df_loc.loc_y_bin)) 
       ) 

はテスト:

In [130]: df['in_bins'] = ( (pd.cut(df.loc_x, np.arange(-500, 500, xstep)).isin(df_loc.loc_x_bin)) 
    .....:      & 
    .....:      (pd.cut(df.loc_y, np.arange(-500, 500, ystep)).isin(df_loc.loc_y_bin)) 
    .....:    ) 

In [131]: df 
Out[131]: 
    loc_x loc_y in_bins 
0 -15  25 True 
1  30  35 False 
2  5 -45 True 
3 -135 -200 False 
+0

うーん、 loc_xとloc_yが同じ行のx_cat binとy_cat binになければならないように、基準をさらに制限する必要があります。 もし私が持っていたなら: 'loc_x = -135 and loc_y = 25' これは間違っているはずですが、それは真実です。 フォーマットについてごめんね – Hound

+0

@Hound、質問を更新したり、いくつかの例を挙げてもらえますか? – MaxU

+0

私は質問を編集しました。もし私に知らせたくなければ、私はそれをもっとはっきりと説明しようとします。 – Hound

関連する問題