2017-08-30 133 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