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