すべて、私は190列と902行の分析的なcsvファイルを持っています。私はいくつかの列(正確には18)の値を現在の1から5のリッカートスケーリングから0~4リッカートスケーリングに再コード化する必要があります。
私はreplaceを使ってみました:
df.replace({"Job_Performance1": {1:0, 2:1, 3:2, 4:3, 5:4}}, inplace=True)
しかし、それはバリューエラーを投げます: "重複するキーと値では置換できない"
私はマップを使用することができます:
df["job_perf1"] = df.Job_Performance1.map({1:0, 2:1, 3:2, 4:3, 5:4})
しかし、このユースケースは統計分析や統計ソフトウェアの標準であるため、これを達成するためのより効率的な方法が必要であることはわかっています。 SPSS
私はStackOverFlowで複数の質問を見直しましたが、どれも自分のユースケースにはまったく適合していませんでした。 例えば パンダ - 列の値を置き換える, パンダは複数の値を1つの列に置き換えます, Python pandas:別のデータフレームの複数の列に一致する複数の列を値に置き換える
提案?
回答:
回答№1は2実際にあなたがここでやっていることであるカラムからスカラー値を単に差し引くことができます:
df["job_perf1"] = df["job_perf1"] - 1
また、これを18列で行う必要がある場合は、18列の名前のリストを作成し、 1
それらのすべてからすぐに:
df[col_list] = df[col_list] - 1
回答№2の場合は1
マッピングの必要はありません。これはベクトル加算として行うことができます。なぜなら、あなたがやっていることは効果的に減算しているからです 1
各値から。これはエレガントに動作します:
df["job_perf1"] = df["Job_Performance1"] - numpy.ones(len(df["Job_Performance1"]))
または、なし numpy
:
df["job_perf1"] = df["Job_Performance1"] - [1] * len(df["Job_Performance1"])