首页 > 解决方案 > 获取 DateTimeIndex 周期的平均值,然后将它们重新分配到原始数据框列

问题描述

我有一个可爱的代码,可以列出给定时间索引期间所有条目的平均值。例如,在具有十年数据的数据框中,它将返回一周中每一天的平均值。我想要做的是用尽可能少的行将这些平均值传播回整个数据帧。

我对制作平均值的代码感到相当自豪。例如,采用包含此数据的数据框(为了您的方便,我列出了“星期几”,因为该值隐含在 datetimeindex 中,并且该列在我自己的数据中不存在):

Datetimeindex   day of week value
2019-01-01      3            60
2019-01-02      4            46
2019-01-03      5            72
2019-01-04      6            16
2019-01-05      7            94
2019-01-06      1            100
2019-01-07      2            41
2019-01-08      3            63
2019-01-09      4            3
2019-01-10      5            52
2019-01-11      6            38
2019-01-12      7            43
2019-01-13      1            22
2019-01-14      2            73
2019-01-15      3            72
2019-01-16      4            30
2019-01-17      5            52
2019-01-18      6            25
2019-01-19      7            28
2019-01-20      1            83
2019-01-21      2            98
2019-01-22      3            9
2019-01-23      4            61
2019-01-24      5            88
2019-01-25      6            54
2019-01-26      7            32
2019-01-27      1            32
2019-01-28      2            41
2019-01-29      3            65
2019-01-30      4            24
2019-01-31      5            92
2019-02-01      6            76
2019-02-02      7            47
2019-02-03      1            80
2019-02-04      2            62

我的代码是这样的:

result = time_series.groupby(time_series.index.weekday).mean()

这为我提供了一周中每一天的 len(7) 平均值向量,如下所示:

day of week mean
1           63.4
2           63
3           53.8
4           32.8
5           71.2
6           41.8
7           48.8

我只想做的是反转公式并将平均值粘贴回原始源数据框中。以上面的例子为例,期望的结果是:

Datetimeindex   value
2019-01-01      53.8
2019-01-02      32.8
2019-01-03      71.2
2019-01-04      41.8
2019-01-05      48.8
2019-01-06      63.4
2019-01-07      63
2019-01-08      52.56
2019-01-09      30.16
2019-01-10      71.04
2019-01-11      46.96
2019-01-12      39.76
2019-01-13      63.4
2019-01-14      63
2019-01-15      52.56
2019-01-16      30.16
2019-01-17      71.04
2019-01-18      46.96
2019-01-19      39.76
2019-01-20      63.4
2019-01-21      63
2019-01-22      52.56
2019-01-23      30.16
2019-01-24      71.04
2019-01-25      46.96
2019-01-26      39.76
2019-01-27      63.4
2019-01-28      63
2019-01-29      52.56
2019-01-30      30.16
2019-01-31      71.04
2019-02-01      46.96
2019-02-02      39.76
2019-02-03      63.4
2019-02-04      63

感觉应该可以简单地反转原始公式并说: time_series.groupby(time_series.index.weekday) = result

但这显然行不通。或者即使可以就地执行 mean() 过程,例如:

result = time_series.groupby(time_series.index.weekday).mean(inplace=True)

或者

result.loc[result.groupby(by=val)] = time_series.groupby(by=val).mean().values

但两者都不起作用。我很想在单线中做到这一点,我感觉很接近,但我根本无法让它发挥作用。你有什么想法?

标签: pythonpandaspandas-groupbydatetimeindex

解决方案


IIUC,这应该有效

result = time_series.groupby('day of week')['value'].transform('mean')

推荐阅读