我有一个带有列ID和二进制列的dataframe,如下所示
ID BINARY_MASK
0 101 1
1 101 0
2 101 1
3 101 1
4 101 1
5 101 1
6 101 0
7 101 1
8 102 1
9 102 1
11 102 1
12 102 1
13 102 0
14 102 0我要做的是获取前四个连续条目,即每个ID组1。我希望看到的结果如下:
ID BINARY_MASK
2 101 1
3 101 1
4 101 1
5 101 1
8 102 1
9 102 1
11 102 1
12 102 1组内有四个连续索引的组内的索引每个组不同,如示例中所示。我该怎么做?
我已经尝试过提供给by Bill G in this question的解决方案,但这对我没有用。
使用Pandas数据仓库和Python3.6
发布于 2018-11-06 13:24:00
为GroupBy.transform创建助手系列,cumsum of shifted值通过ne (!=)进行比较,链有另一个条件,最后由boolean indexing筛选
s = df['BINARY_MASK'].ne(df['BINARY_MASK'].shift()).cumsum()
m1 = df.groupby(s)['BINARY_MASK'].transform('size') >= 4
m2 = df['BINARY_MASK'] == 1
df = df[m1 & m2]
print (df)
ID BINARY_MASK
2 101 1
3 101 1
4 101 1
5 101 1
7 101 1
8 102 1
9 102 1
11 102 1
12 102 1发布于 2018-11-06 13:22:21
发布于 2018-11-06 13:22:06
使用groupby + head:
df[df['BINARY_MASK']==1].groupby('ID').head(4)
ID BINARY_MASK
0 101 1
2 101 1
3 101 1
4 101 1
8 102 1
9 102 1
11 102 1
12 102 1https://stackoverflow.com/questions/53172751
复制相似问题