python - 获取 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
但两者都不起作用。我很想在单线中做到这一点,我感觉很接近,但我根本无法让它发挥作用。你有什么想法?
解决方案
IIUC,这应该有效
result = time_series.groupby('day of week')['value'].transform('mean')
推荐阅读
- swift - macOS 如何在 VoiceOver 辅助功能期间对多个标签进行分组和聚焦
- linux - 如何将 Linux 命令 df -ht ext4 输出插入数据库表
- javascript - AWS Lambda 查询 DynamoDB 表返回 NULL
- python - 如何将字符串转换为 Python 数组?
- extjs - 如何在窗口容器内的网格/表格中显示列表?
- excel - 循环 A 列中的所有值以查找 B 列中的所有匹配项
- javascript - Vue,组合:将“插槽”道具作为属性值传递
- python - 为什么我在for循环中进行了一些更改后键的值没有改变
- excel - VB.Net For Loop 不会执行
- java - 使用 Spark / Java 的 isin() 函数