填充特定行时删除重复项(按行填充)

2024-05-15 15:04:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框,看起来像这样:

>> 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. 在删除过程中,保留NAN较少的行
  3. 如果可能,使用一组行(给定条件)填充Nan值

我能做(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

Tags: columnsnamenonefalsetruedfnanint
1条回答
网友
1楼 · 发布于 2024-05-15 15:04:18

对于由列指定的每个组的替换值,可以使用带有正向和反向填充NoneNaN值的自定义lambda函数

如果使用填充了非缺失值的列(如Name)进行分组,则解决方案将正常工作

columns = 'Name'
df = df.groupby(columns).apply(lambda x: x.ffill().bfill()).drop_duplicates(columns)
print (df)
    Name   Bool  Int Char
0   Anne   True  1.0    A
1   Bert   True  2.0    B
2  Conan  False  0.0    C

相关问题 更多 >