/ / Pandas / Python: Замяна на няколко стойности в няколко колони - python, pandas, recode

Pandas / Python: Замяна на няколко стойности в няколко колони - python, pandas, recode

Всичко, имам аналитичен CSV файл с 190 колони и 902 реда. Трябва да прекодирам стойностите в няколко колони (18 да бъдат точни) от текущия 1-5 Ликер мащабиране до 0-4 Likert мащабиране.

Опитах да използвам:

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, но никой от тях съвсем не отговаря на моя случай на употреба. например Pandas - замества стойностите на колоните, пандата заменя няколко стойности с една колона, Python pandas: заменете стойностите с няколко колони, съответстващи на няколко колони от друг информационен кадър

Предложения?

Отговори:

2 за отговор № 1

Можете просто да извадите скаларна стойност от колоната си, която е в сила това, което правите тук:

df["job_perf1"] = df["job_perf1"] - 1

Също така, както трябва да направите това на 18 cols, тогава аз ще съставя списък на имената на 18 колони и току-що изваждам 1 от всички наведнъж:

df[col_list] = df[col_list] - 1

1 за отговор № 2

Няма нужда от картографиране. Това може да се направи като допълнение към вектор, тъй като ефективно, това, което правиш, изважда 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"])