pandas 一周内同一天数据的平均值

问题描述

我有一个范围从 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)