Python熊猫最多保留3个连续副本

Python熊猫最多保留3个连续副本,python,pandas,Python,Pandas,我有这张桌子: import pandas as pd list1 = [1,1,2,2,3,3,3,3,4,1,1,1,1,2,2] df = pd.DataFrame(list1) df.columns = ['A'] 我想保留最多3个连续副本,或者保留所有副本,以防少于3个或没有副本 结果应该如下所示: list2 = [1,1,2,2,3,3,3,4,1,1,1,2,2] result = pd.DataFrame(list2) result.columns = ['A'] 与连续

我有这张桌子:

import pandas as pd

list1 = [1,1,2,2,3,3,3,3,4,1,1,1,1,2,2]
df = pd.DataFrame(list1)
df.columns = ['A']
我想保留最多3个连续副本,或者保留所有副本,以防少于3个或没有副本

结果应该如下所示:

list2 = [1,1,2,2,3,3,3,4,1,1,1,2,2]
result = pd.DataFrame(list2)
result.columns = ['A']
与连续系列一起使用通过比较不相等和累积和的移位值创建:

详情:

与连续系列一起使用通过比较不相等和累积和的移位值创建:

详情:

最后我们做什么

df[df.groupby(df[0].diff().ne(0).cumsum())[0].cumcount()<3]
    0
0   1
1   1
2   2
3   2
4   3
5   3
6   3
8   4
9   1
10  1
11  1
13  2
14  2
最后我们做什么

df[df.groupby(df[0].diff().ne(0).cumsum())[0].cumcount()<3]
    0
0   1
1   1
2   2
3   2
4   3
5   3
6   3
8   4
9   1
10  1
11  1
13  2
14  2
求解仅使用连续重复项的组,然后切片3个元素:

import itertools

pd.Series(itertools.chain.from_iterable([*g][:3] for i,g in itertools.groupby(df['A'])))
求解仅使用连续重复项的组,然后切片3个元素:

import itertools

pd.Series(itertools.chain.from_iterable([*g][:3] for i,g in itertools.groupby(df['A'])))

对不起,我不清楚。是否可以使用itertools将原始df过滤到结果df中?原来的df有其他的栏目。对不起,我不清楚。是否可以使用itertools将原始df过滤到结果df中?原来的df还有其他栏目。谢谢,这是一个很好的方式this@CyrilYUyw:-快乐编码~还有一件事要问:如果列0的数据类型是字符串,我可以用什么来代替.diff?@CyrilYU-df[df.groupbydf[0].nedf[0].shift.cumsum[0].cumcountOh和.shift和.ne?我想我找到了谢谢,这是一个很好的方法this@CyrilYUyw:-快乐编码~还有一件事要问:如果列0的数据类型是字符串,我可以用什么来代替.diff?@CyrilYU df[df.groupbydf[0].nedf[0].shift.cumsum[0].cumcountOh with.shift and.ne?我想我找到了
0     1
1     1
2     2
3     2
4     3
5     3
6     3
7     4
8     1
9     1
10    1
11    2
12    2
dtype: int64