如何基于Key与Date条件删除重复观测值而非求和?
移除Key和Date重复行的简便方法
嘿,我来帮你搞定这个问题!要删除Key和Date完全相同的重复观测值(不用求和),其实有好几种顺手的方法,看你常用哪种数据分析工具:
在R里的操作
方法1:用dplyr包的distinct函数(推荐,代码易读)
如果你习惯用tidyverse系列的工具,dplyr的distinct()函数直接就能搞定,还能保留其他列的内容:
library(dplyr) # 假设你的数据集存储在名为df的数据框里 df_cleaned <- df %>% distinct(Key, Date, .keep_all = TRUE)
- 加
.keep_all = TRUE是为了保留除了Key和Date之外的所有列,不然默认只会返回这两列的唯一组合。 - 要是你想保留每组重复行里的最后一行而不是第一行,可以用
.keep_last = TRUE(dplyr 1.1.0及以上版本支持),或者先按行号倒序再去重。
方法2:基础R原生方法(不用装包)
如果不想额外安装包,用基础R的duplicated()函数也能实现:
# 保留每组重复行的第一行 df_cleaned <- df[!duplicated(df[c("Key", "Date")]), ] # 要是想保留最后一行,加fromLast=TRUE参数 df_cleaned <- df[!duplicated(df[c("Key", "Date")], fromLast = TRUE), ]
在Python(Pandas)里的操作
Pandas的drop_duplicates()函数专门处理这类需求,非常灵活:
import pandas as pd # 假设你的数据集存储在名为df的DataFrame里 df_cleaned = df.drop_duplicates(subset=['Key', 'Date'], keep='first')
subset参数指定用来判断重复的列(这里就是Key和Date)keep='first'表示保留每组重复行的第一行,换成keep='last'就能保留最后一行;如果想把所有重复行(包括第一次出现的)都删掉,用keep=False就行。
这些方法都是直接移除重复观测值,不会对数值做求和或其他聚合操作,完全符合你的需求~
内容的提问来源于stack exchange,提问作者bli12blu12
相关产品推荐
相关产品推荐

