如何仅删除DataFrame中特定列对应的连续重复行?
解决方案
要实现仅删除指定列的连续重复行、保留每组连续重复项第一条的需求,可通过Pandas的shift()偏移函数实现,核心逻辑是比对当前行与前一行的指定列值,仅保留值发生变化的行。
基础实现(全局判断连续重复)
假设你的数据已加载为DataFrame对象df,要针对Event_type列做去重,代码如下:
# 定义需要判断连续重复的目标列 target_col = "Event_type" # 筛选保留每组连续重复项的第一条 df_filtered = df[df[target_col] != df[target_col].shift(1)].reset_index(drop=True)
逻辑说明
df[target_col].shift(1)会将目标列的所有值向下偏移1行,第一行偏移后的值为NaN,默认会被判定为与原值不同,因此第一行一定会被保留- 只有当前行目标列值与上一行不同时,才会被判定为新的连续组起始行,保留到结果中
- 末尾的
reset_index(drop=True)用于重置结果的行索引,避免原索引残留造成混乱
拓展实现(分组内判断连续重复)
如果需要按维度分组(比如按Subject、Trial分组后,仅在每组内部判断连续重复),可结合groupby实现:
df_filtered = df.groupby(["Subject", "Trial"], group_keys=False)\ .apply(lambda group: group[group["Event_type"] != group["Event_type"].shift(1)])\ .reset_index(drop=True)
针对你提供的示例数据,上述代码执行后,会自动删除第33行的连续Response重复行,仅保留第32行的第一条记录。
内容的提问来源于stack exchange,提问作者Dimitra Tsiapou
相关产品推荐
相关产品推荐

