Python 3を使用して、現在の方法を使用してデータフレームの更新を高速化するにはどうすればよいですか?

ボブウェイクフィールド

〜5MMレコードのデータフレームがあります。別の列との完全一致または部分一致に基づいて、列を新しい値で更新する必要があります。これを行うためのコードを作成しましたが、フィルターをチェーンする方法を理解できませんでした。現在、私のコードはすべてのフィルター要件の列を更新しています。現在、私のコードは次のようになっています。

SQLでは次のようになります。

UPDATE table
SET column1 = 'Value' 
WHERE column2 IN ('123','456','789')

または

UPDATE table
SET column1 = 'a different value'
WHERE 1 = 1
AND column2 LIKE '987%'
OR column2 LIKE '654%'

現在、Pythonでは次のことがあります。

df.loc[df['column2'] == '123', 'column1 '] = 'Value'
df.loc[df['column2'] == '456', 'column1 '] = 'Value'
df.loc[df['column2'] == '789', 'column1 '] = 'Value'

または

df.loc[df.column2.str.startswith('987'),'COMMODITY']='a different value'
df.loc[df.column2.str.startswith('654'),'COMMODITY']='a different value'

Pythonは各行のすべての5MMレコードをループする必要があると思いますが、これは非常に非効率的です。これを行うためのより良い方法は何ですか?

これは、Pandasデータフレームの「in」と「notin」を実装する方法の複製であることが示唆されています。この質問は5年前のものであり、isin()はそのようには機能しなくなりました。

BEN_YO

で使っnp.whereてみませんかisin

df[ 'column1 '] = np.where(df.column2.isin(['123','456','789']),'Value',df.column1)

関して startwiths

df.COMMODITY=np.where(df.column2.str.startswith(('987','654')),'a different value',df.COMMODITY)

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

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

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ