Создать новые столбцы на основе значений в существующих столбцах и объединить строки - PullRequest
2 голосов
/ 31 января 2020

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

Для этого я хотел бы получить фрейм данных в виде одной строки на каждый идентификатор с одним столбцом для каждого субъекта, содержащим значение 1 или 0, чтобы указать, был ли этот предмет взят идентификатором в этой строке.

Пример ввода:

ID      Subject
John    History
John    English
Jane    Maths
Jane    Science
Jane    History
Mark    History
Mark    Science
Mark    Mathematics

Ожидаемый результат:

Subject  English  History  Mathematics  Maths  Science
ID                                                    
Jane           0        1            0      1        1
John           1        1            0      0        0
Mark           0        1            1      0        1

Ответы [ 3 ]

1 голос
/ 31 января 2020

Вы можете сделать следующее, используя pivot_table ()

 df.pivot_table(index='ID', columns='Subject', aggfunc=len,fill_value=0)
1 голос
/ 31 января 2020

Вы можете использовать функцию crosstab:

pd.crosstab(df['ID'], df['Subject'])

Выход:

Subject  English  History  Mathematics  Maths  Science
ID                                                    
Jane           0        1            0      1        1
John           1        1            0      0        0
Mark           0        1            1      0        1
0 голосов
/ 31 января 2020

Вы должны изменить свой фрейм данных из «сложенного» формата в «сводный» формат . Но сначала вам нужно объединить ваши данные.

Попробуйте что-то вроде этого:

agg_df = df.groupby(["ID", "Subject"]).count().reset_index(name="count")
agg_df.pivot(index='ID', columns='Subject', values='count')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...