Python 使用Pandas删除同一日期某个时差的连续重复项
该表包含在特定时间登录的人员的姓名。如果某个人在30分钟内再次登录,我只想为他们保留一份该行的副本。30分钟内可以有2个以上的条目。预期结果如下 Jay在30分钟内再次登录,因此他只有一个条目。而Ben在30分钟后再次登录,因此仍有2个条目。删除名称的哪一行并不重要Python 使用Pandas删除同一日期某个时差的连续重复项,python,pandas,dataframe,pandas-groupby,Python,Pandas,Dataframe,Pandas Groupby,该表包含在特定时间登录的人员的姓名。如果某个人在30分钟内再次登录,我只想为他们保留一份该行的副本。30分钟内可以有2个以上的条目。预期结果如下 Jay在30分钟内再次登录,因此他只有一个条目。而Ben在30分钟后再次登录,因此仍有2个条目。删除名称的哪一行并不重要 |name |date |time | |Jay |02/10/2020 |12:00:10| |Jay |02/10/2020 |12:23:50| |Ben |02/12/2020 |11:00
|name |date |time |
|Jay |02/10/2020 |12:00:10|
|Jay |02/10/2020 |12:23:50|
|Ben |02/12/2020 |11:00:20|
|Ben |02/12/2020 |11:40:30|
|Sky |16/12/2020 |15:20:10|
我尝试将日期和时间分组为一个日期时间,然后尝试查找时差,但没有帮助。我也尝试过使用shift(),但不知道如果在30分钟内出现多个条目,这将如何实现。您可以使用:
您可以使用:
|name |date |time |
|Jay |02/10/2020 |12:00:10|
|Ben |02/12/2020 |11:00:20|
|Ben |02/12/2020 |11:40:30|
|Sky |16/12/2020 |15:20:10|
In [4586]: df['new'] = df.groupby(['name', 'date'])['time'].shift()
In [4590]: df['time_diff'] = (pd.to_timedelta(df['time'].astype(str)) - pd.to_timedelta(df['new'].astype(str))).dt.total_seconds().div(60).abs()
In [4596]: df = df[df.time_diff.gt(30) | df.time_diff.isna()][['name', 'date', 'time']]
In [4597]: df
Out[4597]:
name date time
0 Jay 02/10/2020 12:00:10
2 Ben 02/12/2020 11:00:20
3 Ben 02/12/2020 11:40:30
4 Sky 16/12/2020 15:20:10