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