Мы можем попробовать сопоставить каждый уникальный ключ с другими. Например, двойной l oop выглядит так:
# map the string `None` to nan if necessary
df = df.mask(df=='None', np.nan)
keys = ['SSN', 'Student_ID','DrivingLicenseNumber']
for k in keys:
maps = df.dropna(subset=[k]).groupby(k).first()
for c in keys:
if c == k: continue
df[c] = df[c].fillna(df[k].map(maps[c]))
После этого фрейм данных будет выглядеть так:
Name SSN Student_ID DrivingLicenseNumber
0 Smith 2222 1234 DL1234
1 Smith 2222 1234 DL1234
2 Smith 2222 1234 DL1234
3 NaN 2222 1234 DL1234
Из которого мы можем использовать любой уникальный ключ чтобы сбросить дубликаты:
df.groupby('SSN').first()