Как удалить дубликаты по условию?

Есть DataFrame

city year
0 Лодзь 990
1 Краков 990
2 NaN 990
3 Перм 1826
4 NaN 1826
5 NaN 1827

Нужно удалить дубликаты по колонке year, но в случае если поле city не пусто, то такие значения не удалять.

Ожидаю увидеть:

city year
0 Лодзь 990
1 Краков 990
3 Перм 1826
5 NaN 1827

Я думала над таким вариантом, но тогда я удаляю дубликаты и среди значений где колонка city не пуста:

df=df.sort_values(by=['city'])
df=df.drop_duplicates(subset=['year'])
f=df.sort_values(by=['year'])


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

Автор решения: MaxU

решение по описанию уважаемого CrazyElf:

res = (df
       .assign(x=df.groupby("year")["city"].transform("nunique"))
       .query("""city == city or x == 0""")
       .drop(columns="x"))

результат:

In [37]: res
Out[37]:
     city  year
0   Лодзь   990
1  Краков   990
3    Перм  1826
5     NaN  1827
→ Ссылка