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)