1. ホーム
  2. python

[解決済み] pandas/dataframeを使用して加重平均を計算する。

2022-03-01 01:03:32

質問

次のような表があります。 以下の式に基づいて、各日付でグループ化された加重平均を計算したいのです。 私はいくつかの標準的な従来のコードを使用してこれを行うことができますが、このデータはpandasのデータフレームにあると仮定すると、反復ではなく、これを達成するために何か簡単な方法はありますか?

Date        ID      wt      value   w_avg
01/01/2012  100     0.50    60      0.791666667
01/01/2012  101     0.75    80
01/01/2012  102     1.00    100
01/02/2012  201     0.50    100     0.722222222
01/02/2012  202     1.00    80

2012/01/01 w_avg = 0.5 * ( 60/ sum(60,80,100)) + .75 * (80/ 合計(60,80,100)) + 1.0 * (100/サム(60,80,100))

2012/01/02 w_avg = 0.5 * ( 100/ sum(100,80)) + 1.0 * ( 80/ 合計(100,80)

どのように解決するのですか?

私なら、2つのグループビーでやると思います。

まず、"加重平均"を計算する。

In [11]: g = df.groupby('Date')

In [12]: df.value / g.value.transform("sum") * df.wt
Out[12]:
0    0.125000
1    0.250000
2    0.416667
3    0.277778
4    0.444444
dtype: float64

これをカラムに設定すると、その上でgroupbyができる。

In [13]: df['wa'] = df.value / g.value.transform("sum") * df.wt

これで、この列の合計が目的のものになりました。

In [14]: g.wa.sum()
Out[14]:
Date
01/01/2012    0.791667
01/02/2012    0.722222
Name: wa, dtype: float64

または潜在的に

In [15]: g.wa.transform("sum")
Out[15]:
0    0.791667
1    0.791667
2    0.791667
3    0.722222
4    0.722222
Name: wa, dtype: float64