问题描述
我有一个范围从 2016 年到 2019 年的数据框,显示了一种商品每天的生产数量。我已将时间设置为索引并将其转换为 date_time 格式。
Time #Produced products
2016-03-26 274
....
2017-03-26 123
2017-02-27 245
....
2018-03-26 282
....
2019-03-23 296
现在,我想找到这些年来的平均每日产量,但以一种了解工作日的方式。因此,由于我们一年有 52 周,因此输出指数将是:第 1 个星期一、第 1 个星期二、....、第 52 个星期六、第 52 个星期日。 对于每个指数,它应该找到2016-2019年产生的数字的平均值。
我想我应该使用诸如 groupby month 和 groupby dayofweek 之类的东西 我不知道如何实施它。你能指导我吗?
解决方法
您可以做的是使用 apply
函数和辅助函数向数据框中添加另一列 -
*此辅助函数假定 Time
列中的所有条目均采用 python datetime
格式
def helper(my_date_time):
week_list = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']
week_number = my_date_time.isocalendar()[1]
week_day = week_list[my_date_time.isocalendar()[2] - 1]
return (week_day + str(week_number))
一旦你有了辅助函数,你就可以修改你的数据框以在另一列中包含工作日和周数-
df['week_number_day'] = df['Time'].apply(helper)
然后你可以用它来找到你需要的平均值
grouped_df = df.groupby("week_number_day")
mean_df = grouped_df.mean()
mean_df = mean_df.reset_index()
print(mean_df)