次のような df がある場合:
a001 a002
1 1
NaN 7
NaN NaN
NaN 3
NaN NaN
2 2
NaN 6
そして、2行のウィンドウで平均を計算したい場合は、これを使用できます:
df['rolling_mean'] = df.mean(axis=1).rolling(window=2, min_periods=1).mean()
戻り値:
a001 a002 rolling_mean
0 1.0 1.0 1.0
1 NaN 7.0 4.0
2 NaN NaN 7.0
3 NaN 3.0 3.0
4 NaN NaN 3.0
5 2.0 2.0 2.0
6 NaN 6.0 4.0
これは、単一行の要素の平均を使用した、2 行のウィンドウでの平均です。たとえば、rolling_mean
row1 の (4) は、row0 の平均と row1(1+1)/2 = 1
の値 (7)の平均です。(1+7)/2 = 4
代わりに、最初の 2 行のこれら 3 つの値の平均が必要な場合は、次の結果が必要です(1+1+7)/3 = 3
。それを取得するために、私はこれを使用しました:
df2 = df.copy()
df['sum'] = df2.sum(axis=1).rolling(window=1, min_periods=1).mean()
df['count'] = df2.count(axis=1).rolling(window=1, min_periods=1).mean()
df['last_2'] = df['sum'].rolling(window=2, min_periods=1).sum() / df['count'].rolling(window=2, min_periods=1).sum()
それは私の望ましい出力を返します:
a001 a002 sum count last_2
0 1.0 1.0 2.0 2.0 1.000000
1 NaN 7.0 7.0 1.0 3.000000
2 NaN NaN NaN 0.0 7.000000
3 NaN 3.0 3.0 1.0 3.000000
4 NaN NaN NaN 0.0 3.000000
5 2.0 2.0 4.0 2.0 2.000000
6 NaN 6.0 6.0 1.0 3.333333
私の質問は次のとおりです:これを行うためのよりエレガントでpythonicな方法はありますか? ありがとう