0

M (行) × N (列) の dataFrame があるとします。

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

および長さ N のベクトル

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

の各列に移動平均関数を適用したいのですが、列dfごとに異なる長さの移動平均を使用したいと考えています (たとえば、列 1 の MA の長さは 1、列 2 の MA の長さは 2 など) - これらの長さは に含まれています。windows

これをすばやく行うための組み込み関数はありますか? 私は知ってdf.apply(lambda a: f(a), axis=0, args=...)いますが、列ごとに異なる引数を適用する方法が不明です

4

1 に答える 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 に答える