使用带有pandas的布尔方法选择列数据集

时间:2017-08-30 22:13:06

标签: python pandas select dataframe indexing

我有一个数据框,其中两列表示坐标,另一列表示布尔格式:

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,有些想法?

2 个答案:

答案 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