gpt4 book ai didi

python - Pandas 按日期时间分组

转载 作者:太空宇宙 更新时间:2023-11-04 10:08:31 27 4
gpt4 key购买 nike

我试图计算在给定日期每小时登录系统的用户数。我的日期类似于:

df=

Name Date
name_1 2012-07-12 22:20:00
name_1 2012-07-16 22:19:00
name_1 2013-12-16 17:50:00
...
name_2 2010-01-11 19:54:00
name_2 2010-02-06 12:10:00
...
name_2 2012-07-18 22:12:00
...
name_5423 2013-11-23 10:21:00

因为我对用户名不感兴趣,所以我删除了该列。我设法使用以下命令创建分组数据结构和新数据框 df2

grp = df.groupby(by=[df.Date.map(lambda x: (x.year, x.month, x.day, x.hour))])
df2 = pd.DataFrame({'Count' : grp.size()}).reset_index()

grpdatetime 类型转换为 (year, month, day, hour) 的元组。

我可以使用 for 循环将它转换回 datetime 类型

for i in range(len(df2)):
proper_date = datetime.datetime(*df2['Date'][i])
df2.set_value(i, 'Date', proper_date)

我想知道是否有更好/更有效的方法来解决这个问题?

最佳答案

您可以 groupbyDate 列转换为 h 并聚合 size :

print (df.Date.values.astype('datetime64[h]'))
['2012-07-12T22+0200' '2012-07-16T22+0200' '2013-12-16T17+0100'
'2010-01-11T19+0100' '2010-02-06T12+0100' '2012-07-18T22+0200'
'2013-11-23T10+0100']

print (df.Name.groupby([df.Date.values.astype('datetime64[h]')]).size())
2010-01-11 19:00:00 1
2010-02-06 12:00:00 1
2012-07-12 22:00:00 1
2012-07-16 22:00:00 1
2012-07-18 22:00:00 1
2013-11-23 10:00:00 1
2013-12-16 17:00:00 1
dtype: int64

另一种解决方案:

print (df.Date.values.astype('<M8[h]'))
['2012-07-12T22+0200' '2012-07-16T22+0200' '2013-12-16T17+0100'
'2010-01-11T19+0100' '2010-02-06T12+0100' '2012-07-18T22+0200'
'2013-11-23T10+0100']

print (df.Name.groupby([df.Date.values.astype('<M8[h]')]).size())
2010-01-11 19:00:00 1
2010-02-06 12:00:00 1
2012-07-12 22:00:00 1
2012-07-16 22:00:00 1
2012-07-18 22:00:00 1
2013-11-23 10:00:00 1
2013-12-16 17:00:00 1
dtype: int64

关于python - Pandas 按日期时间分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39625328/

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