本文将介绍计算pandas连续两行之间的时差的详细情况,特别是关于pandas相邻两行的差值的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于bash
本文将介绍计算pandas连续两行之间的时差的详细情况,特别是关于pandas 相邻两行的差值的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于bash – 读取由行号指定的两行之间的行、java – 计算当前和未来时间之间的时差、Oracle 11g-SQL计算多行之间的时间差、php – 如何计算unix时间戳之间的时差?的知识。
本文目录一览:- 计算pandas连续两行之间的时差(pandas 相邻两行的差值)
- bash – 读取由行号指定的两行之间的行
- java – 计算当前和未来时间之间的时差
- Oracle 11g-SQL计算多行之间的时间差
- php – 如何计算unix时间戳之间的时差?
计算pandas连续两行之间的时差(pandas 相邻两行的差值)
我有一个熊猫数据框如下
Dev_id Time88345 13:40:3187556 13:20:3388955 13:05:00..... ........85678 12:15:28
上面的数据帧有83000行。我想获取两个连续行之间的时间差,并将其保存在单独的列中。理想的结果是
Dev_id Time Time_diff(in min)88345 13:40:31 2087556 13:20:33 1588955 13:05:00 15
我已经尝试过df[''Time_diff''] = df[''Time''].diff(-1)
但出现错误,如下所示
TypeError: unsupported operand type(s) for -: ''datetime.time'' and ''datetime.time''
如何解决这个问题
答案1
小编典典问题是功能pandas
需要datetime
s或timedelta
sdiff
,因此首先要转换为to_timedelta
,然后得到total_seconds
并除以60
:
df[''Time_diff''] = pd.to_timedelta(df[''Time''].astype(str)).diff(-1).dt.total_seconds().div(60)#alternative#df[''Time_diff''] = pd.to_datetime(df[''Time''].astype(str)).diff(-1).dt.total_seconds().div(60)print (df) Dev_id Time Time_diff0 88345 13:40:31 19.9666671 87556 13:20:33 15.5500002 88955 13:05:00 49.5333333 85678 12:15:28 NaN
如果需要floor
或round
每分钟:
df[''Time_diff''] = (pd.to_timedelta(df[''Time''].astype(str)) .diff(-1) .dt.floor(''T'') .dt.total_seconds() .div(60))print (df) Dev_id Time Time_diff0 88345 13:40:31 19.01 87556 13:20:33 15.02 88955 13:05:00 49.03 85678 12:15:28 NaN
bash – 读取由行号指定的两行之间的行
让我们说第23行是我要开始的地方,第56行是最后一行,但不是文件的结尾.
我怎么去阅读第23至56行?我将输出到另一个文件.
awk 'NR >= 23 && NR <= 56'
无论如何,sed让它很有趣.
sed '23,56!d'
或者为了模式,
sed '/start/,/end/!d'
java – 计算当前和未来时间之间的时差
我想计算当天时间(2012年10月1日上午11点)和同一天午夜时间(晚上11点59分59秒,2012年10月1日)的时间差(以毫秒为单位).
我试过这个
Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, 59);
cal.add(Calendar.HOUR, 23);
cal.add(Calendar.MINUTE, 59);
cal.getTime().getTime() - today.getTime();
今天是今天的日期.
但是当我打印出长时间的cal值和今天的时间差时,如果是86400大约一天.
解决方法:
使用cal.set()而不是cal.add()
Calendar cal = Calendar.getInstance();
cal.set(Calendar.SECOND, 59);
cal.set(Calendar.HOUR, 23);
cal.set(Calendar.MINUTE, 59);
long diff = cal.getTime().getTime() - today.getTime();
Oracle 11g-SQL计算多行之间的时间差
问题
我仍在用SQL寻找自己的脚,并尝试计算某个用户在轮班期间扫描项目多长时间。
每次扫描都带有时间戳,生成唯一的9位数序列号( SEQ 列)和格式05-NOV-16 15:35:24
( THE_DATE
列)的日期/时间。
这个人可能正在扫描几个小时,我想做的是从轮班结束时的最后一个时间戳减去他们生成的第一个时间戳。
因此,例如,给出此数据样本:
+-----------+--------------------+--------+---------+---------+------------+-----------+| SEQ | THE_DATE | SCANID | LOCATN | USER_ID | FIRST_NAME | LAST_NAME |+-----------+--------------------+--------+---------+---------+------------+-----------+| 103939758 | 05-NOV-16 14:36:22 | 194972 | DOOR 19 | AX9868 | Mike | Derry || 103939780 | 05-NOV-16 14:38:07 | 194972 | DOOR 19 | AX9868 | Mike | Derry || 103939792 | 05-NOV-16 14:39:24 | 194972 | DOOR 19 | AX9868 | Mike | Derry || 103940184 | 05-NOV-16 15:16:53 | 194972 | DOOR 19 | AX9868 | Mike | Derry || 103940185 | 05-NOV-16 15:51:41 | 194972 | DOOR 19 | AX9868 | Mike | Derry || 103940214 | 05-NOV-16 09:51:42 | 194993 | DOOR 16 | BC1910 | Tony | McCann || 103940215 | 05-NOV-16 15:19:06 | 194993 | DOOR 16 | BC1910 | Tony | McCann ||+-----------+--------------------+--------+---------+---------+------------------------
期望的结果
我想从出现的最后一行减去Mike Derry的第一行的时间戳,在这种情况下为第5行,这样我就可以在数小时内得到答案(1.25)。
最终结果应按天,user_id,first_name和last_name分组。
到目前为止,我已经在线查看了oracle文档,这使我尝试使用看起来很有希望的LEAD函数。它查看下一行以查找下一个出现在其中的用户标识的下一个时间戳,然后按该用户ID进行分区,以创建具有该时间戳的新列。
所以SQL看起来像这样
SELECT SEQ, THE_DATE,SCANID,LOCATN,USER_ID,LEAD(SYSDAT ) OVER (PARTITION BY USER_ID ORDER BY SYSDAT) AS NEXT_SCAN FROM myTable...
但是,这给了我错误的结果,因为它似乎重复计算了时间差。我确定您的SQL专家对此有更优雅的解决方法,因为我认为此功能不适合此特定问题:)
因此,我试图实现的最终结果是:
+-----------+---------+------------+-----------+-----------+| THE_DATE | USER_ID | FIRST_NAME | LAST_NAME | TOTAL_HRS |+-----------+---------+------------+-----------+-----------+| 05-NOV-16 | AX9868 | Mike | Derry | 1.25 || 05-NOV-16 | BC1910 | Tony | McCann | 5.47 |+-----------+---------+------------+-----------+-----------+
非常感谢您的帮助
答案1
小编典典SELECT TRUNC(THE_DATE) as THE_DATE, USER_ID, FIRST_NAME, LAST_NAME, MAX(THE_DATE) - MIN(THE_DATE) as TOTAL_HRS FROM yourTableGROUP BY TRUNC(THE_DATE), USER_ID, FIRST_NAME, LAST_NAME
php – 如何计算unix时间戳之间的时差?
我有$current_time和$purchase_time.如何确保purchase_time小于当前时间的24小时?
$purchasedToday = $current_time - $purchase_time < 24 * 60 * 60; if ($purchasedToday) { echo 'You just bought the item'; } else { echo 'You bought the item some time ago'; }
今天的关于计算pandas连续两行之间的时差和pandas 相邻两行的差值的分享已经结束,谢谢您的关注,如果想了解更多关于bash – 读取由行号指定的两行之间的行、java – 计算当前和未来时间之间的时差、Oracle 11g-SQL计算多行之间的时间差、php – 如何计算unix时间戳之间的时差?的相关知识,请在本站进行查询。
本文标签: