我根据字段' 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。我需要为每个分组应用差异逻辑。
任何帮助都将不胜感激!!
答案 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
我希望这有帮助!