如何使用python获取同一列中相同值之间的时差
在这里,我有一个输入日期和时间的数据。所以这里我想得到同一列中相同值之间的唯一时间差 我的csv的子集:如何使用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:
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不是错误,只是更好的示例数据;)是的,这是我期待的代码。谢谢。我有一个问题。你检查我的这个问题了吗“”你有什么想法来继续这个代码吗?我被困在这里。你能帮我解决这个错误吗?