数据处理中的重复行处理技巧与实践

# 根据“手机号码”分组,然后对每一组数据进行处理
for _, group in df2[df2['手机号码'].notnull()].groupby('手机号码'):
    # 将重复行的"产品名字"合并到第一行内,只保留第一个
    group['产品名字'] = group['产品名字'].apply(lambda x: x if isinstance(x, str) else "")
    first_product = group.iloc[0]['产品名字'] # 取第一个产品名字
    group.loc[:, '产品名字'] = first_product

    # 去重
    df_unique = group.drop_duplicates(subset=['手机号码'], keep='first')
    df_duplicate = group.drop(df_unique.index)
    # 将处理后的数据赋值回原始数据
    df2.loc[df_unique.index, '产品名字'] = df_unique['产品名字']
    df2.drop(df_duplicate.index, inplace=True)
  1. 首先,通过 df2['手机号码'].notnull() 条件筛选出手机号码不为空的行,接着使用 groupby('手机号码') 方法根据手机号码进行分组。循环遍历每个分组时,group 变量表示当前分组的数据。

  2. 为了处理重复行的产品名字,首先使用 apply 方法对每个分组的产品名字进行处理。使用 lambda 函数保证非字符串类型的数据转换为空字符串。这样做是为了确保后续操作的一致性。

  3. 接下来,通过 group.iloc[0]['产品名字'] 取得当前分组的第一个产品名字,将其赋值给变量 first_product

  4. 使用 loc 方法将当前分组的所有行的产品名字修改为 first_product,实现将重复行的产品名字合并到第一行内,只保留第一个。

  5. 接下来,进行去重操作。使用 drop_duplicates 方法对分组后的数据进行去重,指定以手机号码为基准进行去重,保留第一个出现的行,得到去重后的数据 df_unique

  6. 通过 drop 方法,将重复行的数据从原始数据 df2 中删除,得到去重后的重复行数据 df_duplicate

  7. 最后,使用 loc 方法将处理后的数据 df_unique['产品名字'] 赋值回原始数据 df2 的相应位置,实现将处理后的数据重新赋值给原始数据。

你可能感兴趣的:(python,数据处理)