Я получил столбец вида:

0           q4
1           4
2           3   
3           1
4           2
5           1
6           5
7           1
8           3

В столбце представлены ответы пользователей на вопрос из 5 вариантов (1-5).

Я хочу превратить это в матрицу из 5 колонн, где индексы - это 5 возможных ответов, а значения 1 или 0 в соответствии с данным ответом пользователя.

Визуально мне нужна матрица формы:

0   q4_1  q4_2  q4_3  q4_4 q4_5
1   Nan    Nan   Nan   1    Nan
2   Nan    Nan   1    Nan   Nan
3   1      Nan   Nan  Nan   Nan
4   Nan    1     Nan  Nan   Nan
5   1      Nan   Nan  Nan   Nan
0
Alkis Ko 15 Янв 2021 в 19:14

2 ответа

Лучший ответ
for i in range(1,6):
    df['q4_'+str(i)]=np.where(df.q4==i, 1, 0)

def df['q4']

Выход:

>>> print(df)

   q4_1  q4_2  q4_3  q4_4  q4_5
0     0     0     0     1     0
1     0     0     1     0     0
2     1     0     0     0     0
3     0     1     0     0     0
4     1     0     0     0     0
5     0     0     0     0     1
6     1     0     0     0     0
7     0     0     1     0     0
1
IoaTzimas 15 Янв 2021 в 16:22

Я думаю, что поворот - это лучший вариант. Вам нужно будет предварительно заполнить df необходимой информацией в новой таблице. Кроме того, я не понимаю, почему вам нужно только 5 строк, но я также добавил их в iloc. Если вы его удалите, у вас будут эти данные для всего индекса (до 8).

import pandas as pd

df = pd.DataFrame({'q4': [4, 3, 1, 2, 1, 5, 1, 3]})
df.index += 1
df['values'] = 1
df = df.reset_index().pivot(index='q4', columns='index', values='values').T.iloc[:5]

Отпечатки

q4     1    2    3    4   5
index                        
1    NaN  NaN  NaN  1.0 NaN
2    NaN  NaN  1.0  NaN NaN
3    1.0  NaN  NaN  NaN NaN
4    NaN  1.0  NaN  NaN NaN
5    1.0  NaN  NaN  NaN NaN
1
Tom Wojcik 15 Янв 2021 в 16:34