Всичко, имам аналитичен 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"])