GVKun编程网logo

计算pandas连续两行之间的时差(pandas 相邻两行的差值)

9

本文将介绍计算pandas连续两行之间的时差的详细情况,特别是关于pandas相邻两行的差值的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于bash

本文将介绍计算pandas连续两行之间的时差的详细情况,特别是关于pandas 相邻两行的差值的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于bash – 读取由行号指定的两行之间的行、java – 计算当前和未来时间之间的时差、Oracle 11g-SQL计算多行之间的时间差、php – 如何计算unix时间戳之间的时差?的知识。

本文目录一览:

计算pandas连续两行之间的时差(pandas 相邻两行的差值)

计算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需要datetimes或timedeltas
diff,因此首先要转换为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

如果需要floorround每分钟:

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 – 读取由行号指定的两行之间的行

bash – 读取由行号指定的两行之间的行

我将如何阅读两行之间的所有行?

让我们说第23行是我要开始的地方,第56行是最后一行,但不是文件的结尾.

我怎么去阅读第23至56行?我将输出到另一个文件.

这样的行号很容易与awk:
awk 'NR >= 23 && NR <= 56'

无论如何,sed让它很有趣.

sed '23,56!d'

或者为了模式,

sed '/start/,/end/!d'

java – 计算当前和未来时间之间的时差

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计算多行之间的时间差

Oracle 11g-SQL计算多行之间的时间差

问题

我仍在用SQL寻找自己的脚,并尝试计算某个用户在轮班期间扫描项目多长时间。

每次扫描都带有时间戳,生成唯一的9位数序列号( SEQ 列)和格式05-NOV-16 15:35:24THE_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时间戳之间的时差?

php – 如何计算unix时间戳之间的时差?

我使用time()在 PHP中创建时间戳;

我有$current_time和$purchase_time.如何确保purchase_time小于当前时间的24小时?

由于UNIX时间戳只是秒数,所以只需使用差异:
$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时间戳之间的时差?的相关知识,请在本站进行查询。

本文标签: