获取 pandas 中特定日期范围的平均值

Chi*_*ode 4 python average date-range pandas

我需要按网站对数据进行分组,并获取特定日期范围内的平均浏览量。我的数据如下所示:

date        website         amount_views
1/1/2021        a               23
1/2/2021        a               17
1/3/2021        a               10
1/4/2021        a               25
1/5/2021        a               2
1/1/2021        b               12
1/2/2021        b               7
1/3/2021        b               5
1/4/2021        b               17
1/5/2021        b               2
Run Code Online (Sandbox Code Playgroud)

所以我需要看看 a 和 b 网站在两个日期范围(1/1/2021 - 1/3/2021(前)和 1/3/2021 - 1/5/2021(后))的平均值是多少期望的输出是:

date        website         avg_amount_views
pre            a                 31.5
post           a                 35.6
pre            b                 15.5
post           b                 22.6
Run Code Online (Sandbox Code Playgroud)

wwn*_*nde 6

您可以使用 np.where 和 date. Between 来分配前后状态并按相同网站进行分组并查找平均值。

一行(虽然不太可读):

  df['date']=pd.to_datetime(df['date'])
  df.groupby([np.where(df['date'].between('1/1/2021','1/3/2021'),'pre'\
  ,'post'),'website'])['amount_views'].mean().to_frame('mean')
Run Code Online (Sandbox Code Playgroud)

一步一步(更具可读性):

df['date']=pd.to_datetime(df['date'])
df['status']=np.where(df['date'].between('1/1/2021','1/3/2021'),'pre','post')
df.groupby(['status','website'])['amount_views'].mean().to_frame('mean')

                     mean
status website           
post   a        13.500000
       b         9.500000
pre    a        16.666667
       b         8.000000
Run Code Online (Sandbox Code Playgroud)