2

我有一个数据集,其中包含带有发布日期 (YYYY-MM-DD)、访问的 URL。我想计算一整年的访问基准(平均值)。页面在不同日期发布......例如,与 3 月发布的第 2 页(11,000)相比,8 月发布的第 1 页(10,000 次访问)的权重/贡献将更多。

这是我的数据集:

点击这里查看我的数据集

第一步:

所以首先我想在我的数据集中添加一个列(即时间范围),它可以计算从发布日期开始的时间范围。例如:如果页面发布于 2019-12-10,它可以给出从我今天的日期开始的时间范围/持续时间,预计 o/p:(2019 年 12 月,9 个月)。即(页面发布的月份年份,从今天开始的总月数

第二步:

我想根据步骤 1 中计算的时间范围列来规范化/重新调整我的数据(访问) 。

如何计算平均值/基准。

4

1 回答 1

1

第一步,您可以使用以下代码:读取数据框

import pandas as pd
df = pd.read_csv("your_df.csv")

我的示例数据框如下:

            Pub.Dates Type  Visits
0  2019-12-10 00:00:00    A    1000
1  2019-12-15 00:00:00    A    5000
2  2018-06-10 00:00:00    B    6000
3  2018-03-04 00:00:00    B   12000
4  2019-02-10 00:00:00    A    3000

规范化日期:首先定义一个方法来规范化一个日期:

from datetime import datetime

def normalize_date(date): # input: '2019-12-10 00:00:00'
    date_obj = datetime.strptime(date,"%Y-%m-%d %H:%M:%S") # get datetime object
    date_to_str = date_obj.strftime("%B %Y") # 'December 2019'
    diff_date = datetime.now() - date_obj # find diff from today 
    diff_month = int(diff_date.days / 30) # convert days to month
    normalized_value = date_to_str + ", " + str(diff_month) + " months"
    return normalized_value # 'December 2019, 9 months'

现在将上述方法应用于日期列的所有值:

df['Pub.Dates'] =list(map(lambda x: normalize_date(x), df["Pub.Dates"].values))

标准化的数据框将是:

                  Pub.Dates Type  Visits
0   December 2019, 9 months    A    1000
1   December 2019, 9 months    A    5000
2      June 2018, 27 months    B    6000
3     March 2018, 31 months    B   12000
4  February 2019, 19 months    A    3000
5       July 2020, 2 months    C    9000

但是对于第二步,如果每个月有多条记录,您可以执行以下步骤,groupby日期和您需要的其他列,然后获取它们的平均值:

average_in_visits = df.groupby(("Pub.Dates", "Type")).mean()

结果将是:

                               Visits
Pub.Dates                Type        
December 2019, 9 months  A       3000
February 2019, 19 months A       3000
July 2020, 2 months      C       9000
June 2018, 27 months     B       6000
March 2018, 31 months    B      12000
于 2020-09-23T15:01:18.870 回答