pandasで別の値に基づいて1つの値を変更する質問する

pandasで別の値に基づいて1つの値を変更する質問する

私は Stata コードを Python で再現しようとしており、Pandas の使用を勧められました。しかし、データの処理方法がよくわかりません。

列見出し「ID」のすべての値を反復処理するとします。その ID が特定の番号と一致する場合、対応する 2 つの値 FirstName と LastName を変更します。

Stata では次のようになります:

replace FirstName = "Matt" if ID==103
replace LastName =  "Jones" if ID==103

したがって、ID == 103 の値に対応する FirstName 内のすべての値が Matt に置き換えられます。

Pandasでは、このようなことを試しています

df = read_csv("test.csv")
for i in df['ID']:
    if i ==103:
          ...

ここからどこへ行けばよいかわかりません。何かアイデアはありますか?

ベストアンサー1

1 つのオプションは、Python のスライス機能とインデックス機能を使用して、条件が満たされる場所を論理的に評価し、そこにあるデータを上書きすることです。

データを直接読み込むことができると仮定するpandasと、pandas.read_csv次のコードが役立つかもしれません。

import pandas
df = pandas.read_csv("test.csv")
df.loc[df.ID == 103, 'FirstName'] = "Matt"
df.loc[df.ID == 103, 'LastName'] = "Jones"

コメントで述べたように、両方の列への割り当てを一度に行うこともできます。

df.loc[df.ID == 103, ['FirstName', 'LastName']] = 'Matt', 'Jones'

上書き割り当て操作pandasを使用するには、バージョン 0.11 以降が必要であることに注意してください。loc実際、0.8のような古いバージョンでは(連鎖代入の批判者が言うかもしれないが)、連鎖代入は正しいそれを実行する方法であるため、パンダの最新バージョンでは回避する必要があるとしても、知っておくと便利です。


もう一つの方法は、連鎖代入と呼ばれるものを使うことです。この動作は安定性に欠けるため、最善の解決策とは考えられません(明確に推奨されないドキュメントには記載されていませんが、以下の点を知っておくと便利です。

import pandas
df = pandas.read_csv("test.csv")
df['FirstName'][df.ID == 103] = "Matt"
df['LastName'][df.ID == 103] = "Jones"

おすすめ記事