〜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()はそのようには機能しなくなりました。
で使っ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]
コメントを追加