首页 > 解决方案 > 使用熊猫的两个时间戳之间的差异每天剩余小时

问题描述

我正在处理日志数据,我必须每天查找软件的使用情况。例如,如果日志显示用户:开始时间 04/01/2019 上午 9:15 结束时间 04/03/2019 下午 12:00。如果我在这两个日期之间有所不同,那么我将获得跨度而不是特定日期的数据使用情况。有没有一种方法可以让我在结束日期之前获得每天的数据使用量。

数据将具有如下所示的类似形式

在此处输入图像描述

这就是我想要实现的目标

在此处输入图像描述

标签: pythonpandasdate

解决方案


由于您不提供一些原始数据,因此我自己创建了一些假数据。另外,我不确定您是否要Start dateEnd date您的描述进行比较。如果我误解了你,请在下面发表评论。

In [10]: import pandas as pd                                                                                                                                                                                                                  

In [11]: import numpy as np                                                                                                                                                                                                                   

In [12]: df1 = pd.DataFrame({"A":[1,2], "Start":[20190302, 20190401], "End": [20190304, 20190402]})                                                                                                                                           

In [13]: df1                                                                                                                                                                                                                                  
Out[13]: 
   A     Start       End
0  1  20190302  20190304
1  2  20190401  20190402

In [14]: df2 = pd.DataFrame(df1.values.repeat((df1.End - df1.Start > 1) + 1, axis=0), columns=df1.columns)                                                                                                                                    

In [15]: df2                                                                                                                                                                                                                                  
Out[15]: 
   A     Start       End
0  1  20190302  20190304
1  1  20190302  20190304
2  2  20190401  20190402

如果您需要比较您的实际日期,您可能需要使用datetimelib 之类的东西来做到这一点。表格示例:

In [28]: import datetime                                                                                                                                                                                                                      

In [29]: dt1 = datetime.datetime.strptime("11/30/2018 17:13", "%m/%d/%Y %H:%M")                                                                                                                                                               

In [30]: dt1                                                                                                                                                                                                                                  
Out[30]: datetime.datetime(2018, 11, 30, 17, 13)

In [31]: dt2 = datetime.datetime.strptime("11/29/2018 17:13", "%m/%d/%Y %H:%M")                                                                                                                                                               

In [32]: dt3 = datetime.datetime.strptime("11/28/2018 17:13", "%m/%d/%Y %H:%M")                                                                                                                                                               

In [33]: dt1 - dt2                                                                                                                                                                                                                            
Out[33]: datetime.timedelta(days=1)

In [34]: (dt1 - dt2).days                                                                                                                                                                                                                     
Out[34]: 1

In [35]: (dt1 - dt3).days                                                                                                                                                                                                                     
Out[35]: 2

推荐阅读