Pandas 时间序列跟踪事件之间的时间

发布于 2025-01-09 05:19:21 字数 559 浏览 2 评论 0原文

我有一个数据框如下:

Date                  User  
2-23-2022 09:00:00    u1
2-23-2022 09:01:00    u2
2-24-2022 07:00:00    u1
2-24-2022 09:00:00    u1
2-24-2022 12:00:00    u2

我想计算,对于每一列,同一用户的事件之间经过的时间:

Date                  User      output
2-23-2022 09:00:00    u1        NaN
2-23-2022 09:00:01    u2        NaN
2-24-2022 07:00:00    u1        22 hours (time object)
2-24-2022 09:00:00    u1        2 hours (time object)
2-24-2022 12:00:00    u2        27 hours (time object)

输出不必以小时为单位,可以以秒为单位(等)

i have a dataframe as the follow:

Date                  User  
2-23-2022 09:00:00    u1
2-23-2022 09:01:00    u2
2-24-2022 07:00:00    u1
2-24-2022 09:00:00    u1
2-24-2022 12:00:00    u2

And i want to calculate, for every column, the time elapsed between the same user's events:

Date                  User      output
2-23-2022 09:00:00    u1        NaN
2-23-2022 09:00:01    u2        NaN
2-24-2022 07:00:00    u1        22 hours (time object)
2-24-2022 09:00:00    u1        2 hours (time object)
2-24-2022 12:00:00    u2        27 hours (time object)

The output doesn't have to be in hours, can be in seconds (etc)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

世俗缘 2025-01-16 05:19:21

尝试使用 groupby

将输出保持为 Timestamp 格式:

df["output"] = df.groupby("User")["Date"].diff()

>>> df
                 Date User          output
0 2022-02-23 09:00:00   u1             NaT
1 2022-02-23 09:01:00   u2             NaT
2 2022-02-24 07:00:00   u1 0 days 22:00:00
3 2022-02-24 09:00:00   u1 0 days 02:00:00
4 2022-02-24 12:00:00   u2 1 days 02:59:00

转换为小时 (int)

df["output"] = df.groupby("User")["Date"].diff().dt.total_seconds().div(3600)

>>> df
                 Date User     output
0 2022-02-23 09:00:00   u1        NaN
1 2022-02-23 09:01:00   u2        NaN
2 2022-02-24 07:00:00   u1  22.000000
3 2022-02-24 09:00:00   u1   2.000000
4 2022-02-24 12:00:00   u2  26.983333

Try with groupby:

To keep the output in Timestamp format:

df["output"] = df.groupby("User")["Date"].diff()

>>> df
                 Date User          output
0 2022-02-23 09:00:00   u1             NaT
1 2022-02-23 09:01:00   u2             NaT
2 2022-02-24 07:00:00   u1 0 days 22:00:00
3 2022-02-24 09:00:00   u1 0 days 02:00:00
4 2022-02-24 12:00:00   u2 1 days 02:59:00

To convert to hours (int)

df["output"] = df.groupby("User")["Date"].diff().dt.total_seconds().div(3600)

>>> df
                 Date User     output
0 2022-02-23 09:00:00   u1        NaN
1 2022-02-23 09:01:00   u2        NaN
2 2022-02-24 07:00:00   u1  22.000000
3 2022-02-24 09:00:00   u1   2.000000
4 2022-02-24 12:00:00   u2  26.983333
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文