0

假设我有一个 M(行)乘 N(列)数据帧

df = pandas.DataFrame([...])

和一个长度为 N 的向量

windows = [1,2,..., N]

我想对 中的每一列应用移动平均函数df,但希望移动平均对于每一列具有不同的长度(例如,column1 的 MA 长度为 1,column 2 的 MA 长度为 2,等等) - 这些长度包含在windows

是否有内置函数可以快速执行此操作?我知道df.apply(lambda a: f(a), axis=0, args=...)但不清楚如何为每列应用不同的参数

4

1 回答 1

1

这是一种方法:

In [15]: dfrm
Out[15]: 
          A         B         C
0  0.948898  0.587032  0.131551
1  0.385582  0.275673  0.107135
2  0.849599  0.696882  0.313717
3  0.993080  0.510060  0.287691
4  0.994823  0.441560  0.632076
5  0.711145  0.760301  0.813272
6  0.932131  0.531901  0.393798
7  0.965915  0.812821  0.287819
8  0.782890  0.478565  0.960353
9  0.908078  0.850664  0.912878

In [16]: windows
Out[16]: [1, 2, 3]

In [17]: pandas.DataFrame(
    {c: dfrm[c].rolling(windows[i]).mean() for i, c in enumerate(dfrm.columns)}
)
Out[17]: 
          A         B         C
0  0.948898       NaN       NaN
1  0.385582  0.431352       NaN
2  0.849599  0.486277  0.184134
3  0.993080  0.603471  0.236181
4  0.994823  0.475810  0.411161
5  0.711145  0.600931  0.577680
6  0.932131  0.646101  0.613049
7  0.965915  0.672361  0.498296
8  0.782890  0.645693  0.547323
9  0.908078  0.664614  0.720350

正如评论中提到的@Manish Saraswat,您也可以表达与dfrm[c].rolling_mean(windows[i]). 此外,如果需要,您可以使用序列作为项目windows,它们将表示自定义窗口形状(大小和权重),或具有不同rolling聚合和关键字的任何其他选项。

于 2018-03-07T20:04:35.047 回答