将数据帧从时间戳转换为时间间隔

Posted

技术标签:

【中文标题】将数据帧从时间戳转换为时间间隔【英文标题】:convert the dataframe into time intervals from timestamps 【发布时间】:2022-01-19 15:20:21 【问题描述】:

我的数据框如下所示

user   action created_at
user1   A     2021-12-15 11:58:53.217258
user1   A     2021-12-15 11:50:27.864876
user1   B     2021-12-15 14:23:27.864876
user1   A     2021-12-15 14:23:27.864876
user3   C     2021-12-15 12:48:09.044315
user3   D     2021-12-15 12:48:09.044315
user4   A     2021-12-15 14:48:09.044315
   

我想要以下内容。其中总动作是动作的频率

                            11-12   12-13 ... 14-15
user   total_action  action 
user1    3             A       2        0        1
user1    1             B       0        0        1
user3    1             C       0        1        0
user4    1             D       0        1        0
user5    1             A       0        0        1

这里的 11-12、12-13 是时间间隔(可以是字符串格式,没有问题)。我曾尝试查看pd.Grouper,但这也无济于事。

【问题讨论】:

【参考方案1】:

这是pd.crosstab

(pd.crosstab([df.user, df.action],df.created_at.dt.hour, 
                  margins=True, margins_name='total_action')
     .iloc[:-1] # remove column total
)

输出:

created_at    11  12  14  total_action
user  action                          
user1 A        2   0   1             3
      B        0   0   1             1
user3 C        0   1   0             1
      D        0   1   0             1
user4 A        0   0   1             1

或者您可以将groupby 与石斑鱼一起使用,例如:

(df.groupby(['user','action', pd.Grouper(key='created_at', freq='H')])
      .size().unstack(fill_value=0)
      .reset_index()
     )

输出:

created_at   user action  2021-12-15 11:00:00  2021-12-15 14:00:00  2021-12-15 12:00:00
0           user1      A                    2                    1                    0
1           user1      B                    0                    1                    0
2           user3      C                    0                    0                    1
3           user3      D                    0                    0                    1
4           user4      A                    0                    1                    0

您可以添加total_action 列。

【讨论】:

以上是关于将数据帧从时间戳转换为时间间隔的主要内容,如果未能解决你的问题,请参考以下文章

c# winform 如何把时间戳转换为时间?

js 中日期 转换成时间戳 例如2013-08-30 转换为时间戳

php怎么将指定日期转换为时间戳

linux怎么将时间戳转换为时间

linux怎么将时间戳转换为时间

php怎么将指定日期转换为时间戳?