Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何计算每周使用pandas登录用户的平均操作次数以及操作的时间和日期?_Python_Pandas_Pandas Groupby - Fatal编程技术网

Python 如何计算每周使用pandas登录用户的平均操作次数以及操作的时间和日期?

Python 如何计算每周使用pandas登录用户的平均操作次数以及操作的时间和日期?,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我有一个数据集,上面有登录名以及用户帖子的日期和时间 posts = {'Login':['User1', 'User2', 'User2', 'User1', 'User2', 'User1', 'User2', 'User2'], 'Posted':['17.02.2020 12:32', '19.02.2020 10:11', '21.02.2020 07:08', '22.02.2020 14:00', '23.02.2020 11:02', '25.02.2020 18:19', '2

我有一个数据集,上面有登录名以及用户帖子的日期和时间

posts = {'Login':['User1', 'User2', 'User2', 'User1', 'User2', 'User1', 'User2', 'User2'], 'Posted':['17.02.2020 12:32', '19.02.2020 10:11', '21.02.2020 07:08', '22.02.2020 14:00', '23.02.2020 11:02', '25.02.2020 18:19', '27.02.2020 00:03', '29.02.2020 15:56']}
df_posts = pd.DataFrame(posts)

    Login   Posted
0   User1   17.02.2020 12:32
1   User2   19.02.2020 10:11
2   User2   21.02.2020 07:08
3   User1   22.02.2020 14:00
4   User2   23.02.2020 11:02
5   User1   25.02.2020 18:19
6   User2   27.02.2020 00:03
7   User2   29.02.2020 15:56
我需要计算每个用户的平均帖子数量。例如,对于这个数据集,User1在2月17日至2月23日的一周内发表了2篇文章,在下一周(2月24日至3月1日)发表了1篇文章。因此,User1平均每周发布1.5篇文章

我需要得到以下结果:

    Login   Average number of posts per week
0   User1   1.5
1   User2   2.5
我尝试编写以下代码:

# Assigning a week column to each post
posts['Week'] = posts['Posted'].dt.strftime('%U')

# Calculating total number of posts per week for each user
total_posts = posts.groupby(['Login', 'Week']).size().reset_index(name ='Total_posts')

# Estimating average frequency of making posts for each user
freq_posts_per_week = total_posts.groupby('Login')['Total_posts'].mean().reset_index(name ='Avg_posts_per_week')
但我得到了以下错误:

/Users/username/opt/anaconda3/lib/python3.7/site packages/ipykernel_launcher.py:2: 使用CopyWarning设置: 试图在数据帧切片的副本上设置值。 尝试改用.loc[row\u indexer,col\u indexer]=value

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
而且,我的结果对我来说是错误的

有人能帮我解决这个问题吗?

试试:

df_posts.Posted = pd.to_datetime(df_posts.Posted)
(df_posts.groupby(['Login', pd.Grouper(key='Posted',freq='W')]).size()
         .groupby('Login').mean()
         .reset_index(name ='Avg_posts_per_week'))

   Login  Avg_posts_per_week
0  User1                 1.5
1  User2                 2.5

这是一个警告,不是一个错误-这意味着您的代码已执行,但可能会出现意外结果。我遇到以下错误:TypeError:仅对DatetimeIndex、TimedeltaIndex或PeriodIndex有效,但得到了“Index”的实例,然后您必须首先使用:
df_posts.poster=pd.to_datetime将
post
转换为datetime(df_posts.Posted)
。我把它添加到了答案中