首页 > 解决方案 > 如何在根据时差条件保留记录的同时删除重复项?

问题描述

我有以下熊猫数据框df

Datetime              NewDatetime            Value
2020-03-24 09:00      2020-03-24 12:00       10 
2020-03-24 09:00      2020-03-24 13:00       11
2020-03-24 09:00      2020-03-24 14:00       10
2020-03-24 09:00      2020-03-24 15:00       12
2020-03-24 10:00      2020-03-24 12:00       10 
2020-03-24 10:00      2020-03-24 13:00       11
2020-03-24 10:00      2020-03-24 14:00       11
2020-03-24 10:00      2020-03-24 15:00       12
2020-03-24 11:00      2020-03-24 12:00       10 
2020-03-24 11:00      2020-03-24 13:00       16
2020-03-24 11:00      2020-03-24 14:00       11
2020-03-24 11:00      2020-03-24 15:00       12
2020-03-24 12:00      2020-03-24 12:00       12 
2020-03-24 12:00      2020-03-24 13:00       13
2020-03-24 12:00      2020-03-24 14:00       11
2020-03-24 12:00      2020-03-24 15:00       15

我需要删除重复项NewDatetime并保留这些记录的时间差等于NewDatetimeDatetime等于 3 小时。

这是预期的结果:

Datetime              NewDatetime            Value
2020-03-24 09:00      2020-03-24 12:00       10  
2020-03-24 10:00      2020-03-24 13:00       11
2020-03-24 11:00      2020-03-24 14:00       11
2020-03-24 12:00      2020-03-24 15:00       15

我该怎么做?

我知道如何删除重复项并保留最后的记录,但不确定如何添加时差条件:

df.drop_duplicates(["NewDatetime"], keep='last')

标签: pythonpandas

解决方案


尝试:

df['Datetime']=pd.to_datetime(df['Datetime'])
df['NewDatetime']=pd.to_datetime(df['NewDatetime'])
#ensure that both columns are of datetime dtype

然后:

m=((df['NewDatetime']-df['Datetime']).dt.total_seconds()/3600).eq(3)
#check your condition If the difference between these 2 is equal to 3 hrs or not

最后:

df[m]
#OR
df.loc[m]
#passed the condition

推荐阅读