2016-05-09 29 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

相关问题