使用日期时间

时间:2018-03-21 11:55:06

标签: python

我有一个包含许多日期的txt文件,每个日期都代表一个事件:

15MAR18 103000      
15MAR18 120518      
17MAR18 121203      
17MAR18 134443      
17MAR18 151733      
19MAR18 165013      
19MAR18 182253      
19MAR18 195533    

我试图了解在24小时内发生了多少'事件'。

我可以读取文件并解析为datetime对象ok:

for line in range(0, len(event_list):
     eventTime = event_list[line][:14]
     eventTime = datetime.strptime(eventTime, '%d%b%y %H%M%S')

     eventTime_next = event_list[line+1][:14]
     eventTime_next = datetime.strptime(next, '%d%b%y %H%M%S')

我不知道接下来会怎么做。

我试图将前面的线与之前的线进行比较,但我认为这不是解决问题的方法。

我需要它以便发生以下情况

15MAR18 103000      1
15MAR18 120518      2
17MAR18 121203      1
17MAR18 134443      2
17MAR18 151733      3
19MAR18 165013      1
19MAR18 182253      2
19MAR18 195533      3

I.e因此,自第一次比较开始经过24小时后,计数将回到1 ...然后再次使用新的开始参考开始。

我希望这有道理吗?

或者这是pandas图书馆的东西吗?

2 个答案:

答案 0 :(得分:0)

如果您有pandas的访问权限,则pd.Series.cumcount是单向的。此方法仅使用Date来提取运行总计。

我不确定你是否还需要考虑时间。

import pandas as pd
from io import StringIO

mystr = StringIO("""15MAR18 103000      
15MAR18 120518      
17MAR18 121203      
17MAR18 134443      
17MAR18 151733      
19MAR18 165013      
19MAR18 182253      
19MAR18 195533""")

# replace mystr with 'file.csv' below
df = pd.read_csv(mystr, header=None, names=['Date', 'Time'], delim_whitespace=True)

df['RunningTotal'] = df.groupby('Date').cumcount() + 1

#       Date    Time  RunningTotal
# 0  15MAR18  103000             1
# 1  15MAR18  120518             2
# 2  17MAR18  121203             1
# 3  17MAR18  134443             2
# 4  17MAR18  151733             3
# 5  19MAR18  165013             1
# 6  19MAR18  182253             2
# 7  19MAR18  195533             3

答案 1 :(得分:0)

我同意jpj建议的内容。 如果你想使用核心,你可以尝试这样: -

data = '''15MAR18 103000      
15MAR18 120518      
17MAR18 121203      
17MAR18 134443      
17MAR18 151733      
19MAR18 165013      
19MAR18 182253      
19MAR18 195533    
'''
data_list = data.split('\n')

date_list = []
for data_line in data_list:
    data_date = data_line.split(' ')[0].strip()

    if data_date != '':
        if len(date_list)>0:
            count = 1
            for dict1 in date_list:
                if data_date in dict1['line'].strip():
                    count += 1
        else:
            count = 1
        date_list.append({'line':data_line.strip(), 'count':str(count)})

for data in date_list:
    print(data['line'] +'   ' + data['count'])

输出将显示如下:

15MAR18 103000  1
15MAR18 120518  2
17MAR18 121203  1
17MAR18 134443  2
17MAR18 151733  3
19MAR18 165013  1
19MAR18 182253  2
19MAR18 195533  3

enter image description here

一切顺利......快乐的编码:)