数年にわたるデータフレームがあり、ある時点で民族性のコードが変更されました。したがって、年を条件として値を再コード化する必要があります。これは、同じデータフレームの別の列です。たとえば、1 から 3、2 から 3、3 から 4 などです。
old = [1, 2, 3, 4, 5, 91]
new = [3, 3, 4, 2, 1, 6]
そして、これは 1996 年から 2001 年についてのみ行われます。同じ列 (民族) の他の年の値は変更してはなりません。非効率なループが多すぎるのを避けるために、次のことを試しました。
recode_years = range(1996,2002)
for year in recode_years:
df['ethnicity'][df.year==year].replace(old, new, inplace=True)
ただし、データフレームの元の値は変更されませんでした。replace メソッド自体は新しい値を正しく置き換えて返しましたが、条件を適用するときに inplace オプションが元のデータフレームに影響を与えないようです。これは、経験豊富な Pandas ユーザーには明らかかもしれませんが、すべての単一要素をループする代わりに、これを行う簡単な方法があるに違いありません。
編集 (x2): 彼女は別のアプローチの例であり、これも機能しませんでした (「置換の長さはシリーズの長さと等しくなければなりません」および「TypeError: 配列を必要な型に安全にキャストできません」):
oldNewMap = {1:2, 2:3}
df2 = DataFrame({"year":[2000,2000,2000,2001,2001,2001],"ethnicity":[1,2,1,2,3,1]})
df2['ethnicity'][df2.year==2000] = df2['ethnicity'][df2.year==2000].map(oldNewMap)
編集:これは私の他のコンピューターで正常に動作するため、インストール/バージョンに固有の問題のようです。