如何检查数据框中各行之间的相似性并添加一个计数器列,在行匹配时递增?

我对Python(Pandas)还不是很熟悉,请帮助我解决这个问题

我的数据框看起来像这样:- Device_id 是设备的ID,该设备在时间(1524724677)显示一个消息(Msg),时间是以纪元时间表示的。

  Device_Id    Msg                Time0  ABC123     connected        15247246771  ABC123     connected        15247246792  XYZ123     device failed    15247248143  ABC123     connected        15247252794  XVZ123     device failed    15247253005  PQR123      error           15247253256  ABC123     connected        1524725345

我需要对数据框的每一行进行操作,以便添加一些新的列。

我想要的数据框看起来像这样:

  Device_Id    Msg                Time       count0  ABC123     connected        1524724677      11  ABC123     connected        1524724679      22  XYZ123     device failed    1524724814      13  ABC123     connected        1524725279      14  XVZ123     device failed    1524725300      15  PQR123      error           1524725325      16  ABC123     connected        1524725345      2      

这个计数列的工作原理如下:

请阅读所有要点以清楚了解计数列的工作原理

--对于第0行,计数为1,因为这是唯一设备--我们将根据时间增加计数器--每10分钟我们将重置计数器值--对于第1行,计数为2,因为时间(1524724679)在1524724677和1524724677 + 10分钟之间。--对于第2行,它是唯一设备且时间(1524724679)在1524724677和1524724677 + 10分钟之间,所以计数为1。--对于第3行,请注意它不是唯一设备,但计数仍为1,因为时间(1524725279)不在1524724677和1524724677 + 10分钟之间。(计数重置)--对于第4列,计数为1,因为时间(1524725300)在1524725279和1524725279 + 10分钟之间。--对于第5列,计数为1,是唯一设备且时间(1524725325)在1524725279和1524725279 + 10分钟之间。--对于第6列,计数为2,因为时间(1524725345)在1524725279和1524725279 + 10分钟之间。

计数值将在每10分钟重置,这意味着每个device_id的计数将从1开始。

每10分钟后,每个唯一的device_id将被视为新的,因此计数将从1重新开始,并在接下来的10分钟内保持其值。


回答:

你可以使用groupby和grouper函数轻松解决这个问题:

# 转换时间df['Time'] = pd.to_datetime(df['Time'], unit='s')# 获取输出df['count'] = df.groupby(['Device_Id', pd.Grouper(key='Time', freq='10min')]).cumcount()+1print(df)  Device_Id            Msg                Time  count0    ABC123      connected 2018-04-26 06:37:57      11    ABC123      connected 2018-04-26 06:37:59      22    XYZ123  device failed 2018-04-26 06:40:14      13    ABC123      connected 2018-04-26 06:47:59      14    XVZ123  device failed 2018-04-26 06:48:20      15    PQR123          error 2018-04-26 06:48:45      16    ABC123      connected 2018-04-26 06:49:05      2

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注