【问题标题】:How to get the time difference in between same value in same column using python如何使用python获取同一列中相同值之间的时间差
【发布时间】:2020-01-07 02:20:54
【问题描述】:

这里我有一个输入日期和时间的数据。所以在这里我想获得同一列中相同值之间的唯一时间差。

我的 csv 的子集:

print (df)
         date      time  x3
0   10/3/2018   6:15:00   0
1   10/3/2018   6:45:00   5
2   10/3/2018   7:45:00   0
3   10/3/2018   9:00:00   0
4   10/3/2018   9:25:00   7
5   10/3/2018   9:30:00   0
6   10/3/2018  11:00:00   0
7   10/3/2018  11:30:00   0
8   10/3/2018  13:30:00   0
9   10/3/2018  13:50:00   5
10  10/3/2018  15:00:00   0
11  10/3/2018  15:25:00   0
12  10/3/2018  16:25:00   0
13  10/3/2018  18:00:00   7
14  10/3/2018  19:00:00   0
15  10/3/2018  19:30:00   0
16  10/3/2018  20:00:00   0
17  10/3/2018  22:05:00   0
18  10/3/2018  22:15:00   5
19  10/3/2018  23:40:00   0
20  10/4/2018   6:58:00   5
21  10/4/2018  13:00:00   0
22  10/4/2018  16:00:00   7
23  10/4/2018  17:00:00   5

预期输出是:

我编写了代码,它给了我数据集的另一列。我只想在没有列数据的情况下正常计算时差值。

df['time_diff']= pd.to_datetime(df['date'] + " " + df['time'],
                            format='%d/%m/%Y %H:%M:%S', dayfirst=True)

mask = df['x3'].ne(0)
df['Duration'] = df[mask].groupby(['date','x3'])['time_diff'].transform('first')
df['Duration'] =   df['time_diff'].sub(df['Duration']).dt.total_seconds().div(3600)

【问题讨论】:

  • 我不太明白你想要得到什么,但它似乎就像你希望它在一个时间窗口内求和(例如,使某种反向累积和)。如果是这样,您是否尝试过rolling 方法?像df['x3'].rolling(window = 5) 这样你可以使用shift 来获得不同的起点:df['x3'].shift(1).rolling(window = 5) 或者,如果我离题了,也许这就是你需要的:stackoverflow.com/questions/50798853/…
  • 在文本中添加了示例数据:(,还将x3列中的最后一个值更改为5
  • @jezrael 是的,完成了。谢谢你告诉我我的错误。
  • @team - 最后 5 个不是错误,只是更好的样本数据;)

标签: python python-3.x pandas time


【解决方案1】:

我认为你需要:

df['time_diff']= pd.to_datetime(df['date'] + " " + df['time'],
                            format='%d/%m/%Y %H:%M:%S', dayfirst=True)

mask = df['x3'].eq(5)
df['Duration'] = df[mask].groupby(['date','x3'])['time_diff'].diff()
print (df)
         date      time  x3           time_diff Duration
0   10/3/2018   6:15:00   0 2018-03-10 06:15:00      NaT
1   10/3/2018   6:45:00   5 2018-03-10 06:45:00      NaT
2   10/3/2018   7:45:00   0 2018-03-10 07:45:00      NaT
3   10/3/2018   9:00:00   0 2018-03-10 09:00:00      NaT
4   10/3/2018   9:25:00   7 2018-03-10 09:25:00      NaT
5   10/3/2018   9:30:00   0 2018-03-10 09:30:00      NaT
6   10/3/2018  11:00:00   0 2018-03-10 11:00:00      NaT
7   10/3/2018  11:30:00   0 2018-03-10 11:30:00      NaT
8   10/3/2018  13:30:00   0 2018-03-10 13:30:00      NaT
9   10/3/2018  13:50:00   5 2018-03-10 13:50:00 07:05:00
10  10/3/2018  15:00:00   0 2018-03-10 15:00:00      NaT
11  10/3/2018  15:25:00   0 2018-03-10 15:25:00      NaT
12  10/3/2018  16:25:00   0 2018-03-10 16:25:00      NaT
13  10/3/2018  18:00:00   7 2018-03-10 18:00:00      NaT
14  10/3/2018  19:00:00   0 2018-03-10 19:00:00      NaT
15  10/3/2018  19:30:00   0 2018-03-10 19:30:00      NaT
16  10/3/2018  20:00:00   0 2018-03-10 20:00:00      NaT
17  10/3/2018  22:05:00   0 2018-03-10 22:05:00      NaT
18  10/3/2018  22:15:00   5 2018-03-10 22:15:00 08:25:00
19  10/3/2018  23:40:00   0 2018-03-10 23:40:00      NaT
20  10/4/2018   6:58:00   5 2018-04-10 06:58:00      NaT
21  10/4/2018  13:00:00   0 2018-04-10 13:00:00      NaT
22  10/4/2018  16:00:00   7 2018-04-10 16:00:00      NaT
23  10/4/2018  17:00:00   5 2018-04-10 17:00:00 10:02:00

【讨论】:

  • 是的,这就是我期待的代码。谢谢你。我有一个问题您是否检查了我的这个问题“stackoverflow.com/questions/57781788/…”您是否有任何想法继续执行此代码?我被这个困住了。你能帮我解决这个错误吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-28
  • 1970-01-01
  • 1970-01-01
  • 2020-01-04
  • 1970-01-01
  • 2022-12-09
  • 2015-01-10
相关资源
最近更新 更多