Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python获取同一列中相同值之间的时差_Python_Python 3.x_Pandas_Time - Fatal编程技术网

如何使用python获取同一列中相同值之间的时差

如何使用python获取同一列中相同值之间的时差,python,python-3.x,pandas,time,Python,Python 3.x,Pandas,Time,在这里,我有一个输入日期和时间的数据。所以这里我想得到同一列中相同值之间的唯一时间差 我的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:

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

我的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)
我认为你需要:

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

我没有完全理解你想要得到的东西,但它看起来像是你希望它在一个时间窗口内求和的东西(例如,进行某种反向累积求和)。如果是,您是否尝试过
滚动
方法?类似于
df['x3'].rolling(window=5)
的东西,然后您可以使用
shift
来获得不同的起点:
df['x3'].shift(1).rolling(window=5)
或者,如果我偏离了目标,可能这就是您需要的:在文本中添加示例数据:(,在
x3
column@jezrael是的,完成了。谢谢你告诉我我的错误。@team-last 5不是错误,只是更好的示例数据;)是的,这是我期待的代码。谢谢。我有一个问题。你检查我的这个问题了吗“”你有什么想法来继续这个代码吗?我被困在这里。你能帮我解决这个错误吗?