[英]Drop Duplicates in a DataFrame if Timestamps are Close, but not Identical
[英]Drop Duplicates in a DataFrame where a column are identical and have near timestamps
目前我有以下数据框:
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 问题后,我偶然发现了与我有类似问题的这个问题
如果时间戳关闭但不相同,则删除 DataFrame 中的重复项
我重新创建了代码,使其符合我的需要(几乎相同),代码如下所示
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
首先将列转换为datetime
s,然后为预期输出删除| mask1.shift(-1)
| mask1.shift(-1)
:
df['timestamp'] = pd.to_datetime(df['timestamp'])
mask1 = df.groupby('id_pair').timestamp.apply(lambda x: x.diff().dt.seconds < 300)
mask2 = df.id_pair.duplicated(keep=False) & mask1
df = df[~mask2]
print (df)
index timestamp id_a id_b id_pair
0 0 2020-01-01 1 A 1A
2 2 2020-01-01 2 B 2B
3 3 2000-01-01 3 C 3C
4 4 2000-01-01 4 D 4D
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.