使用diff()的日期差异

时间:2016-04-25 13:45:33

标签: python datetime pandas

我根据字段' MachineName',' LocalIPAddress'对数据框进行分组。然后找出每组连续日期之间的差异。

df2 = df.groupby(['MachineName', 'LocalIPAddress', 'DateTime'])['DateTime'].agg(
     ['count']).reset_index()
df2['DateTime'] = pd.to_datetime(df2['DateTime'])
df2['timedif'] = df2['DateTime'].diff()

它适用于第一组,但对于第二组,它不是从头开始,而是从其前一个记录的DateTime中减去DateTime,该记录属于不同的组。

示例数据:

  MachineName LocalIPAddress DateTime count timedif
0 BMTSAFT04 10.18.0.186 2016-04-13 03:42:29.865 1 NaT
1 BMTSAFT04 10.18.0.186 2016-04-13 08:48:33.005 1 05:06:03.140000
2 BMTSAFT04 10.18.0.186 2016-04-13 10:16:28.612 1 01:27:55.607000
3 BMTSAFT04 10.18.0.186 2016-04-13 10:31:33.343 1 00:15:04.731000
4 BMTSAFT04 10.18.0.186 2016-04-13 23:43:12.068 1 13:12:56.580000
5 BMTSYSP05 10.20.9.253 2016-04-13 06:08:53.584 1 -1 day +06:25:41
6 BMTSYSP05 10.20.9.253 2016-04-13 12:01:57.563 1 05:53:03.979000

第5行属于不同的组,因此时差不应为-1 day +06:25:41,必须为NaT。我需要为每个分组应用差异逻辑。

任何帮助都将不胜感激!!

1 个答案:

答案 0 :(得分:0)

致电Zm9vOmJhcg==后,Authorization: basic Zm9vOmJhcg==不再是reset_index()类型。它是一个普通的df2,你不再能够对群组进行操作,因为根本就没有群组,只有一个简单的数据框。

简而言之,当你这样做时:

pandas.core.groupby.DataFrameGroupBy

你实际上在整个系列中运行pandas.core.frame.DataFrame,"未分组"系列,这就是为什么你得到你得到的价值。

如果这是您的示例数据框(在您重置索引之后):

df2['timedif'] = df2['Date'].diff()

在你的描述中,你在某个时候说:

  

第5行属于不同的组

实际上,在重置索引之前,所有样本行都在不同的组中,因为您要按许多不同的列进行分组。但是,在这种情况下,我假设您打算按diff()进行分组,我将在此In [222]: df_sample Out[222]: DateTime LocalIPAddress MachineName count 0 2016-04-13 03:42:29.865 10.18.0.186 BMTSAFT04 1 1 2016-04-13 08:48:33.005 10.18.0.186 BMTSAFT04 1 2 2016-04-13 10:16:28.612 10.18.0.186 BMTSAFT04 1 3 2016-04-13 10:31:33.343 10.18.0.186 BMTSAFT04 1 4 2016-04-13 23:43:12.068 10.18.0.186 BMTSAFT04 1 5 2016-04-13 06:08:53.584 10.20.9.253 BMTSYSP05 1 6 2016-04-13 12:01:57.563 10.20.9.253 BMTSYSP05 1 分组。

MachineName

我希望这有帮助!