我有一个数据集,其中包含带有发布日期(YYYY-MM-DD)和访问的URL。我想计算一整年的访问基准(平均)。页面的发布日期不同。 G。与3月发布的第二页(11,000)相比,8月发布的第一页(具有10,000次访问)的权重/贡献将更大。
这是我的数据集:
第一步:
因此,我首先要在数据集中添加一列(即时间范围),该列可以从发布日期开始计算时间范围。例如:如果该页面于2019年12月10日发布,则可以给出我今天的日期起的时间范围/持续时间,预期为o / p:( 2019年12月,9个月)。即(发布页面的月份,从今天开始的总月份)
第二步:
我想根据步骤1中计算出的时间范围列对我的数据(访问次数)进行标准化/重新调整。
如何计算平均值/基准。
答案 0 :(得分: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