【发布时间】:2017-12-16 02:51:44
【问题描述】:
我想为 DataFrame 中的一些时间序列数据计算扩展 z 分数,但我想使用多列的平均值和标准差来标准化数据,而不是每个列的平均值和标准差分别列。我相信我想使用 groupby 和 DataFrame.expanding 的某种组合,但我似乎无法弄清楚。以下是一些示例数据:
import pandas as pd
import numpy as np
np.random.seed(42)
df = pd.DataFrame(np.random.rand(5,5),
columns=list('ABCDE'),
index=pd.date_range('2016-12-31', periods=5))
df.index.name = 'DATE'
df
输入:
期望的输出:
我将行和数据系列的日期记录为单独的列。我想要的是一个形状相同的新 DataFrame,我在其中计算了扩展的 Z 分数。我不知道该怎么做是让df.expanding(2).mean() 方法跨多个列进行聚合。也就是说,我不想取 A 列的扩展平均值并从 A 列中的值中减去它,而是取 A 到 E 列中值的扩展平均值,然后从 A 中的值中减去该平均值。
如果你从 Excel 的角度来思考,我说的是=AVERAGE(B$2:B3) 和=AVERAGE($B$2:$F3) 之间的区别。做前者非常简单(df.expanding(2).mean()),但我不知道如何为我的生活做后者。
我对@987654330@、stack() 和expanding() 的各种组合进行了很多试验,但无济于事。
【问题讨论】:
标签: python pandas pandas-groupby