заполнить пустые ячейки в pandas DataFrame

Есть два датафрейма:

df1 = pd.DataFrame({
    'name': ['ann', 'maxim', 'ann', 'maxim'],
    'surname': [ 'smith', 'shwarz','smith', 'shwarz'],
    'date': ['2020.01.01',  '2020.01.01', '2020.03.05','2020.03.05'],
    'mark_1': [None,'B', 'A', None],
    'mark_2': [None,'B', None,'A'],
    'mark_3': [None,None, 'A', 'C']
       })
name surname date mark_1 mark_2 mark_3
ann smith 2020.01.01 None None None
maxim shwarz 2020.01.01 B B None
ann smith 2020.03.05 A None A
maxim shwarz 2020.03.05 None A C
df2 = pd.DataFrame({
    'name': ['ann', 'maxim'],
    'surname': [ 'smith', 'shwarz'],
    'mark_1': ['Z','X'],
    'mark_2': ['H','F'],
    'mark_3': ['P','Y']
       })
name surname mark_1 mark_2 mark_3
ann smith Z H P
maxim shwarz X F Y

Не могу сообразить, как можно заполнить все пропущенные значения df1 значениями df2 по имени и фамилии. df1.isnull(df2) заполняет почему-то только первое вхождение:

name surname date mark_1 mark_2 mark_3
ann smith 2020.01.01 Z H P
maxim shwarz 2020.01.01 B B Y
ann smith 2020.03.05 A None A
maxim shwarz 2020.03.05 None A C

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

name surname date mark_1 mark_2 mark_3
ann smith 2020.01.01 Z H P
maxim shwarz 2020.01.01 B B Y
ann smith 2020.03.05 A H A
maxim shwarz 2020.03.05 X A C

Отдельный респект, если сможете подсказать аналогичную операцию в pyspark.

Понимаю, что здесь нужно использовать что-то типа case statement, но как - не могу понять.


Ответы (0 шт):