我有一个数据框,看起来像这样:
>> 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
我想要的是
我能做(1)和(2),我不知道如何做(3)
>>> 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
对于由列指定的每个组的替换值,可以使用带有正向和反向填充
None
或NaN
值的自定义lambda函数如果使用填充了非缺失值的列(如
Name
)进行分组,则解决方案将正常工作相关问题 更多 >
编程相关推荐