首页 > 解决方案 > 如果它在下一个 python 的一分钟内,则删除行

问题描述

我有这个数据框

data = {'Date': [np.datetime64('2005-02-25 01:30:10'), np.datetime64('2005-02-25 01:31:10'),np.datetime64('2005-02-25 02:36:10'),
                 np.datetime64('2005-02-25 02:45:10'), np.datetime64('2005-02-25 02:45:50'),np.datetime64('2005-02-25 03:54:20'),
                 np.datetime64('2005-02-25 03:55:10'),np.datetime64('2005-02-25 05:30:10'), np.datetime64('2005-02-25 06:30:10'),
                 np.datetime64('2005-02-25 06:30:30')],
        'Value':[1,4,6,7,3,6,7,8,3,2]}

df = pd.DataFrame(data)

    Date                Value
0   2005-02-25 01:30:10 1
1   2005-02-25 01:31:10 4
2   2005-02-25 02:36:10 6
3   2005-02-25 02:45:10 7
4   2005-02-25 02:45:50 3
5   2005-02-25 03:54:20 6
6   2005-02-25 03:55:10 7
7   2005-02-25 05:30:10 8
8   2005-02-25 06:30:10 3
9   2005-02-25 06:30:30 2

当下一行在它的一分钟内时,我将如何删除第一行,而不是手动进行。

所以我的预期输出是:

    Date                Value
1   2005-02-25 01:31:10 4
2   2005-02-25 02:36:10 6
4   2005-02-25 02:45:50 3
6   2005-02-25 03:55:10 7
7   2005-02-25 05:30:10 8
9   2005-02-25 06:30:30 2

请让我知道如何做到这一点

标签: pythonpandasdataframedatetime

解决方案


如果更大的相似值或缺失值(匹配最后一个值) ,则使用Series.shiftwth 减法、然后Series.dt.total_seconds除以和最后一个过滤器:DataFrame.floordiv1boolean indexing

s = df['Date'].shift(-1).sub(df['Date']).dt.total_seconds().floordiv(60)

df = df[s.isna() | s.gt(1)]
print (df)
                 Date  Value
1 2005-02-25 01:31:10      4
2 2005-02-25 02:36:10      6
4 2005-02-25 02:45:50      3
6 2005-02-25 03:55:10      7
7 2005-02-25 05:30:10      8
9 2005-02-25 06:30:30      2

推荐阅读