Pandas .cut和.isin功能

时间:2016-05-16 18:27:48

标签: python pandas

我有两个数据帧。第一:

s = pd.Series( ["(-20, -10]", "(-140, -130]", "(0,  10]"], dtype = "category")
t = pd.Series( ["(0, 50]", "(100, 150]", "(-50, 0]"], dtype = "category")
df_loc = pd.DataFrame({'loc_x_bin': s, 'loc_y_bin': t })
df_loc

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

第二

a = pd.Series( [-15, 30, 5, -135, 5, -15])
b = pd.Series( [25, 35, -45, -200, 25, 25])
data = pd.DataFrame({'loc_x': a, 'loc_y': b})
data

[out]:
     loc_x      loc_y
     -15          25
     30           35
     5           -45
    -135         -200
     5            25
    -15           25

我想知道loc_xloc_y是否在同一行的loc_x_binloc_y_bin中。有关详细信息,请参阅此帖子。 Are values in one dataframe in bins of another dataframe?。但是,我现在要弄清楚的是下面输出的第3行和第5行为'False'。

[in]: xstep = 10
[in]: pd.cut(data.loc_x, np.arange(-500, 500, xstep)).isin(df_loc.loc_x_bin))
[out]: 
        0     True
        1    False
        2    False*
        3     True
        4    False*
        5     True

当我运行下面的代码时,在我看来(0,10)'在'df_loc.loc_x_bin中,因为它包含(0,10] bin。所以为什么我得到False in上面的第3和第5行?

[in]:
print pd.cut(data.loc_x, np.arange(-500, 500, xstep))
print df_loc.loc_x_bin

[out]:
0      (-20, -10]
1        (20, 30]
2         (0, 10]*
3    (-140, -130]
4         (0, 10]*
5      (-20, -10]

0      (-20, -10]
1    (-140, -130]
2        (0,  10]*

1 个答案:

答案 0 :(得分:0)

请注意上面代码中(0, 10]的额外空格:

s = pd.Series( ["(-20, -10]", "(-140, -130]", "(0,  10]"], dtype = "category")

应该是:

s = pd.Series( ["(-20, -10]", "(-140, -130]", "(0, 10]"], dtype = "category")