我有一个数据框,其中两列表示坐标,另一列表示布尔格式:
X Y PROB
2 4 False
3 5 False
3 2 False
4 4 True
3 7 True
2 4 False
2 3 False
我要做的是选择连续的False和True坐标并生成2个新的数据帧,如下所示:
如果是假
X Y PROB
2 4 1
3 5 1
3 2 1
2 4 2
2 3 2
在True
的情况下X Y PROB
4 4 1
3 7 1
现在我的方法是使用.isin
,但我得到KeyError
,有些想法?
答案 0 :(得分:2)
或者您可以尝试此操作(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
答案 1 :(得分: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