如何将数据框的单个值除以月平均值?

Posted

技术标签:

【中文标题】如何将数据框的单个值除以月平均值?【英文标题】:How can I divide single values of a dataframe by monthly averages? 【发布时间】:2013-02-24 04:16:18 【问题描述】:

我有以下 15 分钟的数据作为dataframe 3 年。前两列是索引。

2014-01-01 00:15:00  1269.6      
2014-01-01 00:30:00  1161.6      
2014-01-01 00:45:00  1466.4      
2014-01-01 01:00:00  1365.6      
2014-01-01 01:15:00  1362.6      
2014-01-01 01:30:00  1064.0      
2014-01-01 01:45:00  1171.2      
2014-01-01 02:00:00  1171.0      
2014-01-01 02:15:00  1330.4      
2014-01-01 02:30:00  1309.6      
2014-01-01 02:45:00  1308.4      
2014-01-01 03:00:00  1494.0    

我使用resample 获得了第二个月平均值系列。

data_Monthly = data.resample('1M', how='mean')

如何将最后一列中的值除以它们的月平均值,结果仍然是 15 分钟粒度的时间序列?

【问题讨论】:

【参考方案1】:

先做一条石斑鱼:

import pandas as pd

In [1]: grouper = pd.Grouper(freq="1M")

然后制作你的新专栏:

In [2]: df['normed'] = df.groupby(grouper).transform(lambda x: x/x.mean())

通过将 grouper 传递给 groupby 方法,您可以将数据分组为一个月的数据块。在每个块中,您将 15 分钟的间隔数据除以该月的平均值。

【讨论】:

【参考方案2】:

data_Monthly = data.resample('M',on='Date').mean()

【讨论】:

欢迎来到 SO!请考虑在您提供的代码旁边解释您的答案,因为它只会帮助 SO 社区了解您的方法是如何工作的。【参考方案3】:

这可以在一行中完成:

df.groupby([df.index.year, df.index.month]).transform(lambda x: x/x.mean())

【讨论】:

【参考方案4】:

我认为一般建议使用 Grouper 而不是 TimeGrouper。看看this。 例如,如果您的列名为 Date,请使用

grouper = pd.Grouper(key='Date', freq='M')

而不是使用 TimeGrouper,然后按照@Zelazny7 的建议继续。 如果您的列不是日期时间索引,请使用

df['Date'] = pd.to_datetime(df['Date'])

【讨论】:

以上是关于如何将数据框的单个值除以月平均值?的主要内容,如果未能解决你的问题,请参考以下文章

根据每年的每日数据计算月平均值

在 Redshift 中滚动 N 月平均值,每月有多个条目

pandas 重新采样以获得具有时间序列数据的月平均值

将每个值除以其组的平均值

根据数据框的重复列值制作具有平均值(平均值)的表[重复]

如何将组均值与单个观察值进行比较并创建新的 TRUE/FALSE 列?