如何去除Pandas DataFrame指定列的重复值且不删除行
处理DataFrame指定列的重复值(不删除整行)
嘿,刚好碰到过类似需求,我来给你捋清楚怎么操作!你要的是只针对指定列处理重复值,保留整行但把重复的单元格内容清空对吧?用Pandas可以轻松实现,分两种常见场景给你示例:
场景1:全局范围内,指定列中重复的单元格(保留第一次出现的值)
如果是只要指定列里出现过的值,后续重复的都清空,代码如下:
import pandas as pd # 假设你的数据集是df target_cols = ["PLACEMENT # NAME", "IMPRESSIONS","ENGAGEMENTS","DPEENEGAGEMENTS"] # 把指定列中重复的单元格替换为空字符串(想保留NaN就换成pd.NA) df[target_cols] = df[target_cols].mask(df[target_cols].duplicated(), "")
代码解释:
df[target_cols].duplicated():返回和原DataFrame同形状的布尔数组,标记每行在指定列中是否是重复项(默认保留第一个出现的不标记)mask():把布尔值为True的位置替换成你指定的内容(这里是空字符串),这样整行都保留,只有重复的单元格被清空
场景2:按某列分组后,处理其他列的重复值
如果是想按PLACEMENT # NAME分组,在每组内处理IMPRESSIONS等列的重复值——比如同一个广告位下的重复曝光数清空,那就用分组操作:
# 按PLACEMENT # NAME分组,处理其他列的重复值 group_col = "PLACEMENT # NAME" cols_to_process = ["IMPRESSIONS","ENGAGEMENTS","DPEENEGAGEMENTS"] for col in cols_to_process: df[col] = df.groupby(group_col)[col].apply(lambda x: x.mask(x.duplicated(), ""))
这样就能保证同一个广告位下,重复的曝光、互动数据只保留第一次出现的,后续重复的单元格被清空,整行完全保留。
内容的提问来源于stack exchange,提问作者DKM
相关产品推荐
相关产品推荐

