# 根据“客户名称”分组,然后对每一组数据进行处理
for _, group in df2[df2['客户名称'].notnull()].groupby(df2['客户名称'].str.lower()):
这行代码首先通过df2['客户名称'].notnull()
条件筛选出不为空的行,然后使用groupby
函数按照"客户名称"列进行分组。循环迭代每一个分组时,group
变量表示当前分组的数据。
# 将重复行的"产品中文名称"合并到第一行内
group["产品名字"] = group["产品名字"].apply(lambda x: x if isinstance(x, str) else "")
group.loc[:, "产品名字"] = group["产品名字"].str.cat(sep=";")
将每个分组内的重复行的"产品名字"列合并到第一行内。首先,通过apply()
函数和lambda
表达式将"产品名字"列中的非字符串值(如NaN)替换为空字符串。然后,使用str.cat()
函数将"产品名字"列中的多个值以分号分隔连接在一起,并赋值给第一行。
# 去重
df_unique = group.drop_duplicates(subset=["客户名称"], keep='first')
df_duplicate = group.drop(df_unique.index)
对分组内的数据进行去重操作。使用drop_duplicates()
函数可以去除"客户名称"列的重复行,保留第一次出现的行,并将结果赋值给df_unique
变量。然后,从原始分组数据中删除df_unique
变量中包含的行,得到重复的行,并将结果赋值给df_duplicate
变量。
# 将处理后的数据赋值回原始数据
df2.loc[df_unique.index] = df_unique
df2.drop(df_duplicate.index, inplace=True)
最后,通过使用loc
属性和index
将处理后的去重数据df_unique
赋值回原始数据df2
。同时,使用drop()
函数删除原始数据中的重复行df_duplicate
。