Python 当特定列的连续行值大于一个数字时,将删除行

Python 当特定列的连续行值大于一个数字时,将删除行,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个这样的数据框 col1 col2 A 1 B 2 C 3 D 3 E 3 F 4 G 5 H 5 I 5 J 5 现在我想删除那些连续col2值超过3次的行,在上面的数据框中,col2值5出现了3次以上,所以应该删除这些行。所以最终的数据框应该是这样的 col1 col2 A 1 B 2 C 3

我有一个这样的数据框

col1    col2 
  A      1
  B      2
  C      3
  D      3
  E      3
  F      4
  G      5
  H      5
  I      5
  J      5
现在我想删除那些连续col2值超过3次的行,在上面的数据框中,col2值5出现了3次以上,所以应该删除这些行。所以最终的数据框应该是这样的

col1    col2 
 A      1
 B      2
 C      3
 D      3
 E      3
 F      4     
我可以使用带有计数器检入的for循环来实现这一点,但执行时间会更长。正在寻找一些pythonic方式/快捷方式来有效地执行此操作。

使用with for count value,然后按以下方式筛选小于或等于:

对于测试,连续值与and和pass to一起使用(并在其后指定列):


要识别连续的值,通常需要
cumsum
差异和分组依据:

groups = df.col2.ne(df.col2.shift()).cumsum()

group_sizes = df.groupby(groups).transform('size')

out = df[group_sizes <= 3)
groups=df.col2.ne(df.col2.shift()).cumsum()
group_size=df.groupby(groups.transform('size'))

out=df[组大小我认为应该是连续值
g = df['col2'].ne(df['col2'].shift()).cumsum()
df = df[df.groupby([g,'col2'])['col2'].transform('size').le(3)]
print (df)
  col1  col2
0    A     1
1    B     2
2    C     3
3    D     3
4    E     3
5    F     4
groups = df.col2.ne(df.col2.shift()).cumsum()

group_sizes = df.groupby(groups).transform('size')

out = df[group_sizes <= 3)