データフレーム内の列の文字列値がタプルの文字列要素(str.startswith以外)で始まるかどうかを確認します

ジョーイ・ラッシ

ランダムな値("457645","458762496","1113423453"...を持つパンダデータフレーム列があり、これらの値がタプルの要素で始まるかどうかを確認する必要があります("323","229","111")

この場合、それはに当てはまるはずです"1113423453"

私は試しましたがdf[column].str.startswith(tuple)、これは問題なく動作します。ただし、大量のデータ(2M df行と3Kタプル要素)の場合、10K df行と3Kタプル要素(1.47秒)に比べてはるかに遅くなります(約28秒)。

それを行うためのより効率的な方法はありますか?

アルマリ

私は試しましたがdf[column].str.startswith(tuple)、それはうまくいきます…しかし、可能であれば、より効率的な方法を探しています

以来はstartswith()、プレフィックス文字列が大量に最適化されており、ここでは、より効率的かもしれバイナリ検索を使用して、それらを介してちょうどリニアサーチを行いますされていません。このために、プレフィックスをソートする必要があります。

from bisect import bisect_right
s = sorted(tuple)
df[column].apply(lambda str: str.startswith(s[bisect_right(s, str)-1]))

プレフィックスをデータフレームの新しい列に抽出することは可能ですか?

はい、例えばこの機能で:

def startwiths(str):
    prefix = s[bisect_right(s, str)-1]
    if str.startswith(prefix): return prefix

df['new column'] = df[column].apply(startwiths)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ