亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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條經驗 獲得超16個贊

與連續系列一起使用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 關注
  • 281 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號