给出数据框:
df = pd.DataFrame({'col1': ['A', 'A', 'A','B','B'], 'col2': ['type1', 'type2', 'type1', 'type2', 'type1'] , 'hour': ['18:03:30','18:00:48', '18:13:46', '18:11:29', '18:06:31'] })
col1 col2 hour
A type1 18:03:30 # Drop this row as (A type1) already present
A type2 18:00:48
A type1 18:13:46 # keep this row as (A type1) already present.
B type2 18:11:29
B type1 18:06:31
我要基于col1,col2 删除重复项。
例如(row(0):A type1,row(2):A type1)
保留,仅保留具有最近小时的行,例如(18:13:46)。
我尝试使用 groupby 返回基于col1的子集,并尝试使用 drop_duplicates 将重复项删除到col2中。我需要找到一种通过条件的方法(最近一小时)
示例代码:
for key, grp in df.groupby('col1'):
grp.drop_duplicates(subset='col2', keep="LATEST OF HOUR")
预期结果:
col1 col2 hour
A type1 18:03:30
A type2 18:00:48
B type2 18:11:29
B type1 18:06:31
我的原始数据帧较大,该解决方案还需要工作:
col1 col2 other hour
A type1 h 18:03:30 # Drop this row as (A type1) already present
A type2 ss 18:00:48
A type1 ll 18:13:46 # keep this row as (A type1) already present
B type2 mm 18:11:29
B type1 jj 18:06:31
仍然需要根据小时删除列
答案 0 :(得分:0)
df.drop_duplicates(['col1','col2'] , keep = 'last')
答案 1 :(得分:0)
按照anky_91的评论,我这样解决了它:
df.sort_values('hour').drop_duplicates(['col1','col2'] , keep = 'last')
这是根据“小时”列进行排序的,因此您可以确保keep ='last'获得最后一个元素