Как удалить дубликаты по условию?
Есть 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