【发布时间】: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