【发布时间】:2021-02-10 17:08:51
【问题描述】:
目前我有以下数据框:
index timestamp | id_a | id_b | id_pair
--------------------------------------------------------
0 2020-01-01 00:00:00 | 1 | A | 1A
1 2020-01-01 00:01:30 | 1 | A | 1A
2 2020-01-01 00:02:30 | 1 | A | 1A
3 2020-01-01 00:07:30 | 1 | A | 1A
4 2020-01-01 00:00:00 | 2 | B | 2B
5 2000-01-01 00:00:00 | 3 | C | 3C
6 2000-01-01 00:00:00 | 4 | D | 4D
对于数据框,我想删除具有相同 id_pair 和时间戳的行,范围为 X 分钟,比如说 5 分钟。因此预期的结果是这样的:
index timestamp | id_a | id_b | id_pair
--------------------------------------------------------
0 2020-01-01 00:00:00 | 1 | A | 1A
3 2020-01-01 00:07:30 | 1 | A | 1A
4 2020-01-01 00:00:00 | 2 | B | 2B
5 2000-01-01 00:00:00 | 3 | C | 3C
6 2000-01-01 00:00:00 | 4 | D | 4D
在搜索 stackoverflow 问题后,我偶然发现了这个与我的问题类似的问题
Drop Duplicates in a DataFrame if Timestamps are Close, but not Identical
我重新创建了代码,使其符合我的需求(几乎相同),代码如下所示
mask1 = df.groupby('id_pair').timestamp.apply(lambda x: x.diff().dt.seconds < 300)
mask2 = df.unique_contact.duplicated(keep=False) & (mask1 | mask1.shift(-1))
df[~mask2]
但是当我运行代码时,我遇到了这个错误:
TypeError: unsupported operand type(s) for -: 'str' and 'str'
任何帮助或建议将不胜感激
在此先感谢
Python 版本:3.6.12
熊猫版本:0.25.3
【问题讨论】:
-
@Gouri 抱歉,我已经更新了问题,以便为您提供更多背景信息。
标签: python python-3.x pandas dataframe timestamp