2016-02-04 203 views
0

,我有以下的数据帧:时间间隔

id   datetime interval 
0 1 20160101 070000  NaN 
1 1 20160101 080000  60 
2 1 20160102 070000  NaN 
3 1 20160102 073000  30 
4 2 20160101 071500  NaN 
5 2 20160101 071600   1 

,并希望产生的间隔列 - 行之间,但仅适用于相同的ID &当天分钟,刚刚就像在这个例子中 - 所以在sql中,我将按id和datetime进行分区,并使用LAG作为前一行之间的时间间隔。我如何在熊猫中做到这一点?

+1

请提供[最小,完整,可验证的示例](http://stackoverflow.com/帮助/ mcve) –

+0

附有图像。按下链接“df” – Umen

+0

@Umen:张贴图像没有多大帮助,因为如果有人想重现您的框架,他们必须逐个输入每个字符。另一方面,如果您将其作为文本粘贴,则人们可以使用'read_clipboard'来重现您的条件。 – DSM

回答

0

可以列转换datetimeto_datetime和使用groupbydiffastype转换timedelta到分钟:

print df 
    id   datetime interval 
0 1 20160101 070000  NaN 
1 1 20160101 080000  60 
2 1 20160102 070000  NaN 
3 1 20160102 073000  30 
4 2 20160101 071500  NaN 
5 2 20160101 071600   1 

df['datetime'] = pd.to_datetime(df['datetime']) 
df['new']=df.groupby(['id',df['datetime'].dt.day])['datetime'].diff().astype('timedelta64[m]') 
print df 
    id   datetime interval new 
0 1 2016-01-01 07:00:00  NaN NaN 
1 1 2016-01-01 08:00:00  60 60 
2 1 2016-01-02 07:00:00  NaN NaN 
3 1 2016-01-02 07:30:00  30 30 
4 2 2016-01-01 07:15:00  NaN NaN 
5 2 2016-01-01 07:16:00   1 1 
+0

作品谢谢! – Umen