gpt4 book ai didi

python - 如何为 Pandas 数据框中的不同组分配唯一 ID?

转载 作者:太空宇宙 更新时间:2023-11-03 23:57:36 25 4
gpt4 key购买 nike

如何根据特定条件将唯一 ID 分配给在 pandas 数据框中创建的组。例如:我有一个名为 df 的数据框,其结构如下:Name 标识用户,datetime 标识用户访问资源的日期/时间。

Name         Datetime 
Bob 26-04-2018 12:00:00
Claire 26-04-2018 12:00:00
Bob 26-04-2018 12:10:00
Bob 26-04-2018 12:30:00
Grace 27-04-2018 08:30:00
Bob 27-04-2018 09:30:00
Bob 27-04-2018 09:40:00
Bob 27-04-2018 10:00:00
Bob 27-04-2018 10:30:00
Bob 27-04-2018 11:30:00

我想为用户创建 session ,以便为具有相同名称和日期时间值的用户访问资源不超过 30 分钟分配一个唯一 session 。但是,如果用户在访问该资源时表现出超过 30 分钟的不活动状态,则同一用户将在下次访问该资源时分配到不同的 session 。

我的预期输出将如图所示。

用户 Bob 在 27-04-2018 访问资源 9.30,第二次 @ 9.40,第三次 @ 10.00,第四次 @10.30 -> 都是 session 4。但是下一次用户 Bob 访问 @ 11.30 所以时差超过 30 分钟,因为 Bob 已经超过 30 分钟不活动,因此下一个 session 将分配给他。

Name         Datetime                    Id
Bob 26-04-2018 12:00:00 1
Claire 26-04-2018 12:00:00 2
Bob 26-04-2018 12:10:00 1
Bob 26-04-2018 12:30:00 1
Grace 27-04-2018 08:30:00 3
Bob 27-04-2018 09:30:00 4
Bob 27-04-2018 09:40:00 4
Bob 27-04-2018 10:00:00 4
Bob 27-04-2018 10:30:00 4
Bob 27-04-2018 11:30:00 5

感谢您的帮助!上一个问题的链接:How to compare value of second column with same values of first column in pandas dataframe?

最佳答案

你在底部的解释对理解它很有帮助。

您需要在 Name 上分组和一个 groupID (不要将此 groupID 与您的最终 Id 混淆)并调用 ngroup返回 Id .主要是这个groupID怎么定义.创建groupID , 你需要 sort_values分开每个 NameDatetime升序排列。集团Name并在 Datetime 中找到差异在每组 Name 的连续行之间(在同一 Name 内)。使用 gt检查大于 30 分钟和 cumsum得到groupID . sort_index反转回原始顺序并分配给 s如下:

s = df.sort_values(['Name','Datetime']).groupby('Name').Datetime.diff() \
.gt(pd.Timedelta(minutes=30)).cumsum().sort_index()

接下来,groupby Namessort=False保留原始订单并调用ngroup加 1。

df['Id'] = df.groupby(['Name', s], sort=False).ngroup().add(1)

Out[834]:
Name Datetime Id
0 Bob 2018-04-26 12:00:00 1
1 Claire 2018-04-26 12:00:00 2
2 Bob 2018-04-26 12:10:00 1
3 Bob 2018-04-26 12:30:00 1
4 Grace 2018-04-27 08:30:00 3
5 Bob 2018-04-27 09:30:00 4
6 Bob 2018-04-27 09:40:00 4
7 Bob 2018-04-27 10:00:00 4
8 Bob 2018-04-27 10:30:00 4
9 Bob 2018-04-27 11:30:00 5

关于python - 如何为 Pandas 数据框中的不同组分配唯一 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56978362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com