Python 将行复制到新数据帧(如果为';这不是连续六次

Python 将行复制到新数据帧(如果为';这不是连续六次,python,pandas,Python,Pandas,我有如下的数据帧 index a royal 1 1 king 2 1 king 3 1 king 4 1 king 5 1 king 6 1 king 7 2 queen 8 2 queen 9 2 queen 10 2 king 我想将所有第7-10行复制到一个新的数据框中,并将其从原始数据框中删除,因为索引7-10不是六个连续的数字,也不属于同一类别。我的逻辑是这样的 starting

我有如下的数据帧

index a  royal 
1     1  king
2     1  king
3     1  king
4     1  king
5     1  king
6     1  king
7     2  queen
8     2  queen 
9     2  queen
10    2  king
我想将所有第7-10行复制到一个新的数据框中,并将其从原始数据框中删除,因为索引7-10不是六个连续的数字,也不属于同一类别。我的逻辑是这样的

starting_position=0
tracking=0

    for counter, category in enumerate (df['royal']):
       if df['royal'][counter].shift==df['royal'][counter]:
          if df['a'][0].shift==df['a'][0]:
             counter+=1
             if counter!=6:
                df2=df.loc[start_position:counter]
                df.drop([start_position,counter])
                tracking=0 
             elif counter==6:
                tracking=0
          else:
             df2=df.loc[start_position:counter]
             df.drop([start_position,counter])
             tracking=0
        else:
             df2=df.loc[start_position:counter]
             df.drop([start_position,counter])
             tracking=0
这是非常糟糕的代码。我相信有一种方法可以用cumsum做到这一点,但我就是想不出来。我也在尝试groupby和cumsum,但是有太多的错误输出。理想情况下,我希望有这个输出

DF1

DF2


非常感谢。

使用
groupby

df.groupby('a').filter(lambda x : len(x)<6)
Out[173]: 
   index  a  royal
6      7  2  queen
7      8  2  queen
8      9  2  queen
9     10  2   king
df.groupby('a').filter(lambda x : len(x)>=6)
Out[174]: 
   index  a royal
0      1  1  king
1      2  1  king
2      3  1  king
3      4  1  king
4      5  1  king
5      6  1  king
df.groupby('a')。过滤器(λx:len(x)=6)
出[174]:
皇室索引
01国王
1.2.1国王
2 3 1国王
3 4 1国王
4 5 1国王
5 6 1国王

使用
groupby

df.groupby('a').filter(lambda x : len(x)<6)
Out[173]: 
   index  a  royal
6      7  2  queen
7      8  2  queen
8      9  2  queen
9     10  2   king
df.groupby('a').filter(lambda x : len(x)>=6)
Out[174]: 
   index  a royal
0      1  1  king
1      2  1  king
2      3  1  king
3      4  1  king
4      5  1  king
5      6  1  king
df.groupby('a')。过滤器(λx:len(x)=6)
出[174]:
皇室索引
01国王
1.2.1国王
2 3 1国王
3 4 1国王
4 5 1国王
5 6 1国王

优雅典雅,@Wen一如既往。谢谢,我还以为我得用康姆森来做这个呢。@Longroadahead yw愉快地编码优雅优雅,@Wen,像往常一样。有一个upd00t。谢谢,我想我必须使用cumsum来完成这个任务。@Longroadahead yw happy coding
df.groupby('a').filter(lambda x : len(x)<6)
Out[173]: 
   index  a  royal
6      7  2  queen
7      8  2  queen
8      9  2  queen
9     10  2   king
df.groupby('a').filter(lambda x : len(x)>=6)
Out[174]: 
   index  a royal
0      1  1  king
1      2  1  king
2      3  1  king
3      4  1  king
4      5  1  king
5      6  1  king