Назначить предопределенные числа значениям строк столбцов в кадре данных - PullRequest
0 голосов
/ 23 сентября 2018

скажем, у меня есть фрейм данных

   C                 D
agree           Average
agree           agree
strongly agree  disagree
disagree        agree

что я хочу сделать, это присвоить номера значениям столбца C, как это?

 C  D
 1  3
 1  1
 2  0
 0  1

я могу использовать map для одного столбца, но если существует более одного столбца, как мне изменить значения на числа без записи по отдельности для каждого столбца (я знаю, что мог бы использовать для циклов, но проблема в том, как бы я применил его здесь)

Кто-нибудь знает, как это сделать?

Я пытался использовать цикл for

def assignNumbers(df):


for i in df:

    dftest= df[i].map({'Average':3, 'Agree':1, 'Disagree':0, 'Strongly Agree':2})

return dftest

Ответы [ 3 ]

0 голосов
/ 23 сентября 2018

Использование pd.factorize для обобщенного решения (например, если вы не знаете, сколько категорий у вас будет заранее).

pd.DataFrame(pd.factorize(df.values.T.reshape(-1,))[0].reshape(df.shape[1], -1), index=df.columns).T

    C   D
0   0   3
1   0   0
2   1   2
3   2   0
0 голосов
/ 23 сентября 2018

Вы можете использовать тип категории и cat.codes:

df.unstack().astype('category').cat.codes.unstack(0)

   C  D
0  1  0
1  1  1
2  3  2
3  2  1

Если вы действительно хотите соответствовать своему выводу, а не просто присваивать уникальные значения каждомупеременная, вы можете создать CategoricalDtype и определить порядок.

from pandas.api.types import CategoricalDtype
cat = CategoricalDtype(
    categories=['disagree', 'agree', 'strongly agree', 'Average'], ordered=True
)

df.stack().astype(cat).cat.codes.unstack(1)

   C  D
0  1  3
1  1  1
2  2  0
3  0  1
0 голосов
/ 23 сентября 2018

Один подход будет

df.replace({'Average': 3, 'agree': 1, 'disagree': 0, 'strongly agree': 2})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...