在R中按首次出现日期和Names保留记录的实现方法
按ID分组保留每个Names首次出现的行
我有一个包含ID、Date、Code和Names列的DataFrame,同一ID在不同日期有多个条目,Names列的值可能相同或不同。示例数据如下:
ID Date Code Names 1 2010-12-09 1.1.1 Alpha 1 2010-12-15 1.1.1 Alpha 1 2010-12-15 1.1.1 Beta 2 2010-12-09 1.1.1 Beta 2 2010-12-17 1.1.1 Beta 3 2011-02-09 1.1.1 Gamma 3 2011-04-25 1.1.1 Gamma 4 2011-04-25 1.1.1 Tango
需求:按ID分组,保留每个ID下每个Names首次出现日期对应的行,删除其他日期的同名重复行。期望结果如下:
ID Date Code Names 1 2010-12-09 1.1.1 Alpha 1 2010-12-15 1.1.1 Beta 2 2010-12-09 1.1.1 Beta 3 2011-02-09 1.1.1 Gamma 4 2011-04-25 1.1.1 Tango
(注:原期望结果中的ID6为笔误,应为ID4)
解决方案(Pandas实现)
- 先将
Date列转换为日期类型,确保排序逻辑正确:
import pandas as pd df['Date'] = pd.to_datetime(df['Date'])
- 方法一:使用
groupby+first
先按日期排序,再按ID和Names分组,取每组的第一行(即首次出现的记录):
result = df.sort_values('Date').groupby(['ID', 'Names'], as_index=False).first()
- 方法二:使用
drop_duplicates
同样先按日期排序,然后基于ID和Names去重,保留首次出现的行:
df_sorted = df.sort_values('Date') result = df_sorted.drop_duplicates(subset=['ID', 'Names'], keep='first')
两种方法均能得到符合需求的结果,最终输出的result即为目标DataFrame。
内容的提问来源于stack exchange,提问作者Usman YousafZai
相关产品推荐
相关产品推荐

