2016-05-09 47 views
1

我已經有我看起來像這樣的另一個數據幀稱爲數據......一個數據幀中的值是否在另一個數據幀的二進制文件中?

> data 

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

我想叫loc_df與垃圾箱,看起來像這樣的兩列

> loc_df 

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

一個數據幀?在數據中創建一個新的布爾列,顯示loc_x是否在loc_x_binloc_y的值的範圍內,數據幀爲loc_dfloc_y_binloc_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_bin,所述loc_x_binloc_y_bin不是同一行中,所以我想這是錯誤的

+0

哪些

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你列'loc_df'中的對象?那些字符串? ''(-20,-10]'' – piRSquared

+0

他們是類別 – Hound

+0

運行這個'type(loc_df.iloc [0,0])'並且回報你得到的結果 – piRSquared

回答

1

UPDATE2:如果你想檢查xy屬於由同一行中的垃圾桶df_loc(或loc_df):

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:,如果你想檢查x是否屬於loc_x_biny屬於loc_y_bin(來自同一行中df_loc不一定):

如果df_loc.dtypes不顯示category這兩列,那麼你可能想c onvert您的類別category D類第一:

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和loc_y = 25' 它應該是假的,但它是真實的 對不起格式 – Hound

+0

@Hound,你可以更新你的問題或舉一些例子? – MaxU

+0

好吧,我編輯了這個問題,我希望現在清楚。如果不是,請讓我知道,我會盡量更清楚地解釋它。 – Hound

相關問題