# 根据“手机号码”分组,然后对每一组数据进行处理
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)
首先,通过 df2['手机号码'].notnull()
条件筛选出手机号码不为空的行,接着使用 groupby('手机号码')
方法根据手机号码进行分组。循环遍历每个分组时,group
变量表示当前分组的数据。
为了处理重复行的产品名字,首先使用 apply
方法对每个分组的产品名字进行处理。使用 lambda 函数保证非字符串类型的数据转换为空字符串。这样做是为了确保后续操作的一致性。
接下来,通过 group.iloc[0]['产品名字']
取得当前分组的第一个产品名字,将其赋值给变量 first_product
。
使用 loc
方法将当前分组的所有行的产品名字修改为 first_product
,实现将重复行的产品名字合并到第一行内,只保留第一个。
接下来,进行去重操作。使用 drop_duplicates
方法对分组后的数据进行去重,指定以手机号码为基准进行去重,保留第一个出现的行,得到去重后的数据 df_unique
。
通过 drop
方法,将重复行的数据从原始数据 df2
中删除,得到去重后的重复行数据 df_duplicate
。
最后,使用 loc
方法将处理后的数据 df_unique['产品名字']
赋值回原始数据 df2
的相应位置,实现将处理后的数据重新赋值给原始数据。