2017-08-30 124 views
1

我有兩列表示座標和一個布爾格式的追加列一個數據幀的布爾方法設置:選擇列數據與熊貓

X Y PROB 
2 4 False 
3 5 False 
3 2 False 
4 4 True 
3 7 True 
2 4 False 
2 3 False 

我試圖做的是選擇連續虛假與真實座標,併產生2個新dataframes如下:

在虛假

X Y PROB 
2 4 1 
3 5 1 
3 2 1 
2 4 2 
2 3 2 

在真

的情況下的情況下
X Y PROB 
4 4 1 
3 7 1 

現在我的方法是使用.isin但我得到KeyError,有些想法?

回答

1
d1 = df.assign(
    PROB=df.PROB.diff().fillna(False).cumsum() 
).groupby(df.PROB).apply(
    lambda d: d.assign(PROB=d.PROB.factorize()[0] + 1) 
) 

d1 

     X Y PROB 
PROB    
False 0 2 4  1 
     1 3 5  1 
     2 3 2  1 
     5 2 4  2 
     6 2 3  2 
True 3 4 4  1 
     4 3 7  1 

d1.xs(True) 

    X Y PROB 
3 4 4  1 
4 3 7  1 

d1.xs(False) 

    X Y PROB 
0 2 4  1 
1 3 5  1 
2 3 2  1 
5 2 4  2 
6 2 3  2 
+0

真棒!但在我手中,「PROB」列顯示所有值爲1 –

1

或者你可以試試這個(PS:使用.drop('Group',1)刪除列集團)

df['Group']=df.PROB.astype(int).diff().fillna(0).ne(0).cumsum() 
df_True=df[df.PROB] 
df_False=df[~df.PROB] 
df_False.assign(PROB=pd.factorize(df_False.Group)[0]+1) 
Out[111]: 
    X Y PROB Group 
0 2 4  1  0 
1 3 5  1  0 
2 3 2  1  0 
5 2 4  2  2 
6 2 3  2  2 

df_True.assign(PROB=pd.factorize(df_True.Group)[0]+1) 
Out[112]: 
    X Y PROB Group 
3 4 4  1  1 
4 3 7  1  1