2016-04-14 10 views
0

ウィンドウとして「日」に基づいて「サイクル」の加重平均を取ってみたいと思います。ウィンドウは必ずしも同じではありません。パンダで加重平均を計算するにはどうすればいいですか? (私はこれを正しく行っている場合)パンダの可変ウィンドウに基づく加重平均

In [3]: data = {'cycle':[34.1, 41, 49.0, 53.9, 35.8, 49.3, 38.6, 51.2, 44.8], 
'day':[6,6,6,13,13,20,20,20,20]} 


In [4]: df = pd.DataFrame(data, index=np.arange(9), columns = ['cycle', 'day']) 

In [5]: df 
Out[5]: 
    cycle day 
0 34.1 6 
1 41.0 6 
2 49.0 6 
3 53.9 13 
4 35.8 13 
5 49.3 20 
6 38.6 20 
7 51.2 20 
8 44.8 20 

私は3つの値が期待される:

34.1 * 1/3 + 41 * 1/3 + 49 * 1/3 = 41.36

cycle  day 
41.36  6 
6.90  13 
45.90  20 

答えて

1

私が正しく理解していた場合は20日目に同じアプローチは、私はあなただけしたいと思う:

df.groupby(['day']).mean() 
0

グループを曜日にグループ化し、グループの合計を計算し、グループ内のnull以外の値の数で除算するラムダ関数を適用します。

>>> df.groupby('day').cycle.apply(lambda group: group.sum()/group.count()) 
day 
6  41.366667 
13 44.850000 
20 45.975000 
Name: cycle, dtype: float64 

あなたは加重平均を言うものの、私は関与して任意の重みがあるとは思いません。これは、特定の日の平均値であるcycleの単純平均として表示されます。実際、単純な平均で十分です。

また、私は13日の値がとして計算され、44.85が得られると信じています。

+0

実は、それが正しいか、それだけで平均値です。私は実際には1日あたりの加重平均を計算したかったのです。それは私の元々の質問でした。この例は正しくありませんでした。それはどのように機能しますか?ありがとう! – Rohit

+0

SQLnoobに骨を与えます。彼(彼女?)の答えは正しい。 – Alexander

+0

別の質問をする必要がありますか? – Rohit