1. ホーム
  2. python

[解決済み] パンダ。連続した重複を削除する

2023-02-01 13:01:12

質問

pandasで連続した重複だけをドロップする最も効率的な方法は何ですか?

drop_duplicatesはこれを与えます。

In [3]: a = pandas.Series([1,2,2,3,2], index=[1,2,3,4,5])

In [4]: a.drop_duplicates()
Out[4]: 
1    1
2    2
4    3
dtype: int64

しかし、私はこれが欲しいのです。

In [4]: a.something()
Out[4]: 
1    1
2    2
4    3
5    2
dtype: int64

どのように解決するのですか?

使用方法 shift :

a.loc[a.shift(-1) != a]

Out[3]:

1    1
3    2
4    3
5    2
dtype: int64

つまり、上記ではブーリアン・クリテリアを使用しているので、データフレームを-1行シフトしたデータフレームと比較して、マスクを作成しています。

別の方法として diff :

In [82]:

a.loc[a.diff() != 0]
Out[82]:
1    1
2    2
4    3
5    2
dtype: int64

しかし、これは行数が多い場合、本来の方法よりも遅くなります。

更新

Bjarke Ebert が微妙なミスを指摘してくれたおかげで、実際には shift(1) を使うべきか、あるいは単に shift() のように、デフォルトはピリオド1であるため、これは連続した最初の値を返します。

In [87]:

a.loc[a.shift() != a]
Out[87]:
1    1
2    2
4    3
5    2
dtype: int64

インデックスの値の違いに注目してください。