2016-05-16 8 views
0

Ich habe zwei Datenframes. Erstens:Pandas .cut und .isin Funktionalität

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] 

Zweitens:

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 

Ich versuche, herauszufinden, ob loc_x und loc_y in loc_x_bin und loc_y_bin der gleichen Reihe sind. Siehe diesen Beitrag für weitere Details. Are values in one dataframe in bins of another dataframe?. Was ich jedoch jetzt herausfinden möchte, ist, warum die dritte und fünfte Zeile der Ausgabe "falsch" ist.

[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 

Wenn ich führen Sie den Code unten scheint es mir, dass (0, 10] ‚ist in‘ df_loc.loc_x_bin, weil es eine (0,10] bin enthält. Warum bekomme ich False in der 3. und 5. Reihe oben?

[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]* 
+0

'xstep' ist nicht definiert; durch Vermutung scheint es zu sein: "xstep = 10" – Neapolitan

+0

Nein, ich habe 'xstep' definiert, ich habe nur vergessen, es in den Code aufzunehmen. – Hound

Antwort

0

Beachten Sie den zusätzlichen Platz in (0, 10] im Code oben:

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

es sein sollte:

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