У меня есть DataFrame, который выглядит следующим образом:
>> pd.DataFrame([["Anne", True, 1, "A"],["Bert", True, None, "B"],["Conan", False, 0, None],["Bert", None, None, None],["Conan", None, None, "C"],["Bert",None,2,None]], columns = ["Name", "Bool", "Int", "Char"])
Name Bool Int Char
0 Anne True 1.0 A
1 Bert True NaN B
2 Conan False 0.0 None
3 Bert None NaN None
4 Conan None NaN C
5 Bert None 2.0 None
Я хочу
- Удалить дубликаты на основе столбца
- При удалении процесса, оставьте строки с меньшим количеством NaN
- Если возможно, заполните значения Nan, используя набор строк (при условии)
Я могу выполнить (1) и (2) , Я не могу понять, как выполнить (3)
Часть 1 и 2
>>> def remove_duplicates_smartly(df, columns):
df.assign(nan_count= df.isna().sum(axis=1), inplace=True)
df.sort_values(['nan_count'], inplace=True).drop_duplicates(columns, inplace=True)
df.drop(columns=["nan_count"], inplace=True)
return df
>>> my_df = pd.DataFrame([["Anne", True, 1, "A"],["Bert", True, None, "B"],["Conan", False, 0, None],["Bert", None, None, None],["Conan", None, None, "C"],["Bert",None,2,None]], columns = ["Name", "Bool", "Int", "Char"])
>>> remove_duplicates_smartly(my_df)
>>> remove_duplicates_smartly(my_df, ["Name"])
Name Bool Int Char
0 Anne True 1.0 A
1 Bert True NaN B
2 Conan False 0.0 None
Желаемый результат
Текущие отсутствующие значения могут быть заполнены с помощью -удаленные строки. Новые значения должны быть взяты из строк, которые скоро будут удалены, у которых есть общее значение (выбранное пользователем) (в данном случае Имя)
Name Bool Int Char
0 Anne True 1.0 A
1 Bert True 2.0 B
2 Conan False 0.0 C