Панды: Как разделить и прочитать значения

#pandas #dataframe

Вопрос:

В моем наборе данных есть столбец с названиями курсов, пройденных студентом. Он имеет несколько значений

Мой набор данных выглядит следующим образом: текущий набор данных

Я хочу изменить его на набор данных, подобный этому: wantDatasetLikethis

Я хочу разделить эти значения (названия курсов) и создать столбец для каждого курса отдельно и присвоить значения 1 или 0 на основе курсов, пройденных студентом. Как я могу это сделать, используя библиотеку Pandas ?

Любая помощь будет признательна, спасибо

Комментарии:

1. Пожалуйста, добавьте образец фрейма данных в свой пост в виде текста. @S Ра

Ответ №1:

Я создал образец фрейма данных, используя данные, которые вы предоставили

   StudentID                    Courses
0        S1  course1, course2, course3
1        S2  course1, course4, course5
 

Разделите столбец курсы

 df['Courses'] = df.Courses.str.split(', ')

  StudentID                      Courses
0        S1  [course1, course2, course3]
1        S2  [course1, course4, course5]
 

Взорвите колонку курсов

 df = df.explode('Courses')

  StudentID  Courses
0        S1  course1
0        S1  course2
0        S1  course3
1        S2  course1
1        S2  course4
1        S2  course5
 

Используйте get_dummies для создания отдельного столбца для каждого курса

 pd.get_dummies(df.explode('Courses'), columns=['Courses'], prefix='', prefix_sep='')

  StudentID  course1  course2  course3  course4  course5
0        S1        1        0        0        0        0
0        S1        0        1        0        0        0
0        S1        0        0        1        0        0
1        S2        1        0        0        0        0
1        S2        0        0        0        1        0
1        S2        0        0        0        0        1
 

Комментарии:

1. Спасибо. Это полезно. Я не хочу повторять студентов подряд. Студенческий билет должен появиться только один раз

2. Используйте df.set_index('StudentID') @SRa

3. Спасибо. SetIndex не помогает. Я хочу, чтобы данные были в этом формате. Пожалуйста, посмотрите на картинку, приведенную в вопросе.

Ответ №2:

 header_list = ['StudentID','Courses','Course1', 'Course2']

df = df.reindex(columns = header_list)  
 

Это включит эти столбцы в фрейм данных. Включая пустые столбцы.