python - 如何删除在上一个日期时间的结束时间之前开始的日期时间

标签 python

我将创建事件时间列表,其中下一个事件的重复日期时间和开始时间在前一个事件的结束时间之前开始,列表中不存在。 我将日期时间转换为儒略日期。名单如下:

Before converting to Julian date:

   timename      starttime                endtime
1  20170103      2017/01/03T05:36:05      2017/01/03T13:42:04
2  20170103      2017/01/03T14:00:04      2017/01/03T20:30:07
3  20170112      2017/01/12T16:24:05      2017/01/12T23:42:05
4  20170114      2017/01/14T05:00:05      2017/01/14T09:42:06
5  20170114      2017/01/14T08:24:05      2017/01/14T14:18:05
6  20170117      2017/01/17T21:49:12      2017/01/18T02:30:06
7  20170119      2017/01/19T12:24:05      2017/01/19T18:30:06
8  20170124      2017/01/24T15:36:05      2017/01/25T04:42:07
9  20170125      2017/01/25T16:00:05      2017/01/26T14:30:05
...
After converting to Julian date:

  timename   starttime           endtime
1 2457756.5  2457756.733391204   2457757.07087963
2 2457756.5  2457757.0833796295  2457757.354247685
3 2457765.5  2457766.1833912036  2457766.4875578703
4 2457767.5  2457767.7083912035  2457767.9042361113
5 2457767.5  2457767.85005787    2457768.0958912037
6 2457770.5  2457771.4091666667  2457771.604236111
7 2457772.5  2457773.016724537   2457773.2709027776
8 2457777.5  2457778.1500578704  2457778.695914352
9 2457778.5  2457779.166724537   2457780.104224537
...

如果第一行 strattime 和 endtime 包含第二行开始时间,我想删除。否则,跳过。例如,您可以看到第 5 行开始时间 (2017/01/14T08:24:05) 在第 4 行结束时间 (2017/01/14T09:42:06) 之前开始。所以它包括第 5 行开始时间。但我需要删除它们并仅获取在上一个结束时间之后开始的时间。

这是我的尝试。

import itertools
import pandas as pd

infilename2 = 'D:/My works/C3_jdate/2017.txt'
outfilename2 = 'D:/My works/2017_1.txt'


lines_seen = set()
outfile = open(outfilename2, "w")
df = pd.read_csv(infilename2,sep = '\t', engine='python', header=0)
    
t = df['timename']
t1 = df['timename']
st = df['starttime']
et = df['endtime']

for i in range(len(df)):
    for j in range(i+1, len(df)):
        if t[i] != t1[j]:
            pass
        elif t[i] == t1[j]:
            if (st[i]<st[j] and et[i]<=st[j]):
                
                line1 = df.to_string()
                if line1 not in lines_seen:
                    outfile.write(line1)
                    lines_seen.add(line1)
outfile.close()

但是,输出仍然与输入相同。 请分享对此问题的任何想法。

最佳答案

对于每一行,您可以使用 Pandas 从当前 starttime 中减去当前之前的 endtime:

df['diff'] = df['starttime'] - df['endtime'].shift(1)

在这里,.shift将行向上移动指定的时间段,在本例中为 1。

请确保您的数据已相应排序。

然后,您可以过滤掉 diff 为负数的行(保留当前开始时间和上一个结束时间之间的时间差 > 0 的行:

filtered_df = df[df['diff'] > pd.Timedelta('0 days 00:00:00')]

关于python - 如何删除在上一个日期时间的结束时间之前开始的日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74204406/

相关文章:

python - Django 支持开发人员特定配置/设置的最佳方式

python - 如何使用 rotozoom 在 pygame 中设置缩放和旋转动画

python - 在一个非常大的列表中找到一个很大的元组

python - FFmpeg Drawbox 和 ZMQ b'38 功能未实现'

python - 文本小部件填充一半屏幕

python内存错误(有足够的可用内存)

Python - 查找列表中所有可能的元素分组

python - 检测到 Youtube 加密签名

python - minimalmodbus 读取数据位

python - 浪费空间或内存泄漏 : Python