为了账号安全,请及时绑定邮箱和手机立即绑定

Python Pandas 最多保留 3 个连续重复

Python Pandas 最多保留 3 个连续重复

慕森王 2022-07-12 16:21:46
我有这张桌子:import pandas as pdlist1 = [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']
查看完整描述

3 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

与连续系列一起使用GroupBy.head,通过比较不相等的移位值和累积和来创建Series.cumsum:


df1 = df.groupby(df.A.ne(df.A.shift()).cumsum()).head(3)

print (df1)

    A

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

详情:


print (df.A.ne(df.A.shift()).cumsum())

0     1

1     1

2     2

3     2

4     3

5     3

6     3

7     3

8     4

9     5

10    5

11    5

12    5

13    6

14    6

Name: A, dtype: int32


查看完整回答
反对 回复 2022-07-12
?
侃侃尔雅

TA贡献1801条经验 获得超15个赞

与连续系列一起使用GroupBy.head,通过比较不相等的移位值和累积和来创建Series.cumsum:


df1 = df.groupby(df.A.ne(df.A.shift()).cumsum()).head(3)

print (df1)

    A

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

详情:


print (df.A.ne(df.A.shift()).cumsum())

0     1

1     1

2     2

3     2

4     3

5     3

6     3

7     3

8     4

9     5

10    5

11    5

12    5

13    6

14    6

Name: A, dtype: int32


查看完整回答
反对 回复 2022-07-12
?
慕神8447489

TA贡献1780条经验 获得超1个赞

解决itertools.groupby只有连续重复的组,然后切片3个元素:


import itertools


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

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


查看完整回答
反对 回复 2022-07-12
  • 3 回答
  • 0 关注
  • 228 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信