質問: ### Pythonのデータフレームにおいて、Accessの更新クエリのような処理をしたい pythonでデータ処理を行っている中で、Accessでいうところの更新クエリのような処理を行いたいのですが やり方が分からず、どなたかよいやり方を教示いただけないでしょうか。 更新クエリのように一発で更新できるようなものを探しています。 df1 | 県コード | 県名 | 人口1 | | --- | --- | --- | | 001 | 東京 | 3000 | | 002 | 神奈川 | 2000 | | 003 | 千葉 | 2000 | というデータフレームがあったときに、 df2 | 県コード | 県名 | 人口2 | | --- | --- | --- | | 001 | 東京 | 3200 | | 002 | 神奈川 | 1800 | | 004 | 埼玉 | 1500 | というデータを元に、元のdf1の人口データを更新したいのです 作りたいデータ df1 | 県コード | 県名 | 人口1 | | --- | --- | --- | | 001 | 東京 | 3200 | | 002 | 神奈川 | 1800 | | 003 | 千葉 | 2000 | ### 試したこと やり方がわからず、現状ではデータをpd.mergeでデータをつなげたうえで、 人口3というカラムを作って、人口2がNANだったら人口1を、人口2がNANでなければ人口2を反映する関数を作って applyで適用してなんとかしましたが、 もっといい方法があるのではないか、と考えております。 ポイントは、df2の県コードでマッチしたものだけを更新するというところです。 (Accessでいうところの更新クエリなのですが、pythonでの書き方がわからず、、、) どうぞよろしくお願いします。
回答: `県コード` を Indexにして、これを基に `DataFrame.update()` を行えばよいのではないでしょうか。 ``` import pandas as pd df = pd.DataFrame( [['001','東京',3000], ['002','神奈川',2000], ['003','千葉',2000]], columns = ['県コード', '県名', '人口1'] ) new_df = pd.DataFrame( [['001','東京',3200], ['002','神奈川',1800], ['004','埼玉',1500]], columns = ['県コード', '県名', '人口1'] ) # "県コード"をIndexにする df = df.set_index('県コード') df.update(new_df.set_index('県コード')) print(df) # 県名 人口1 #県コード #001 東京 3200.0 #002 神奈川 1800.0 #003 千葉 2000.0 ```