#python #pandas #dataframe
Вопрос:
У меня есть первый фрейм данных «Исследование»: это имена всех студентов в колледже
col1
A
B
C
D
E
F
и мой 2-й фрейм данных — «Студент»: это определенная группа студентов с определенным предметом
name pass
C 1
F 1
B 1
Я хочу создать фрейм данных из вышеперечисленных 2 фреймов данных, который выглядит примерно так:
фрейм данных 3:
col1 value
A False
B True
C True
D False
E False
F True
Это означает, что учащиеся B, C и F имеют значение 1 в кадре данных «Учащийся», а остальные все отсутствуют.
Я попытался сделать это, используя метод слияния в панд, что-то вроде этого:
df3 = Study.merge(Student, left_on="col1", right_on="name", how="left")
но это приводит к:
col1 name pass
A nan nan
B B 1
C C 1
D nan nan
E nan nan
F F 1
Чтобы получить фрейм данных 3, показанный выше — я могу обработать это, удалив имя столбца и, возможно, заменив nan на false и 1 на True, но есть ли другой способ сделать это более красиво.
Ответ №1:
Вы можете проверить, есть ли df1['col1']
в df2['name']
:
df3 = df1.assign(value=df1['col1'].isin(df2['name']))
df3
Выход:
col1 value
0 A False
1 B True
2 C True
3 D False
4 E False
5 F True
Ответ №2:
Возьмите только необходимые столбцы после слияния , т. е. col1
и pass
, и заполните NaN
значения False
df3=Study.merge(Student, left_on="col1", right_on="name", how="left")[['col1', 'pass']].fillna(False)
Теперь просто преобразуйте столбец pass в boolean
тип
df3['pass'] = df3['pass'].astype(bool)
выход:
df3
col1 pass
0 A False
1 B True
2 C True
3 D False
4 E False
5 F True
Вы можете переименовать столбцы, если хотите..
Ответ №3:
Если ваш 2-й фрейм данных «Студент» не просто содержит все переданные значения 1 (может быть 0), вы также можете сделать:
df_merge = Study.merge(Student, left_on='col1', right_on='name', how='left')
df_merge['value'] = df_merge['pass'].eq(1)
df_merge = df_merge.drop(['name', 'pass'], axis=1)
Результат:
print(df_merge)
col1 value
0 A False
1 B True
2 C True
3 D False
4 E False
5 F True