Быстро и Грязно
Это работает и работает долго.Однако некоторые утверждают, что это ошибка, которая может быть исправлена.В настоящее время first
возвращает первый ненулевой элемент, если он существует для каждого столбца.
df.groupby('objectID', as_index=False).first()
objectID grade OS method
0 object_id_0001 AAA Mac organic
1 object_id_0002 ABC Win NaN
pd.concat
pd.concat([
pd.DataFrame([d.lookup(d.notna().idxmax(), d.columns)], columns=d.columns)
for _, d in df.groupby('objectID')
], ignore_index=True)
objectID grade OS method
0 object_id_0001 AAA Mac organic
1 object_id_0002 ABC Win NaN
stack
df.set_index('objectID').stack().groupby(level=[0, 1]).head(1).unstack()
grade OS method
objectID
object_id_0001 AAA Mac organic
object_id_0002 ABC Win None
Если случайно это строки ('NA'
)
df.mask(df.astype(str).eq('NA')).groupby('objectID', as_index=False).first()