私は以下のようなデータフレームを持っていますパンダのデータフレーム内の複数の列の加重平均
クラス|学生| V1 | V2 | V3 | wb
A |マックス| 10 | 12 | 14 | 1
A |アン| 9 | 6 | 7 | 0.9
B |トム| 6 | 7 | 10 | 0.3
B |ディック| 3 | 8 | 7 | 0.7
C | Dibs | 5 | 2 | 3 | 0.8
C |モック| 6 | 4 | 3 | 0.6
D |サニー| 3 | 4 | 5 | 0.9
D |ロック| 8 | 3 | 6 | 1
と私はクラス でグループ化されたV1、V2、V3結果は
クラスV1_M V2_M V3_M
以下のようなものでなければなりませんの加重平均を計算したいですB 5 3 3
C 4 4 3
これまでのところ、私は、各列のデータフレームを分離することができます。しかし、私はパンダの経験の1週間で初心者です、私は非常に非効率的 を感じるそして、ここで1変数
import pandas as pd
import numpy as np
def wtdavg(frame, var, wb):
d = frame[var]
w = frame[wb]
return (d * w).sum()/w.sum()
df = pd.read_csv('Sample.csv')
Matrix = df.groupby(['Class']).apply(wtdavg,var='V2',wb='wb')
print(Matrix)
ためのコードです。前もって感謝します。
マックス
ありがとうございました。もし100sの変数があれば?私たちはlambda xのダイナミックなシリーズを持つことができますか?pd.Series([sum(x.V1 * x.wb)/ sum(x.wb)......... v1000まで) – mAx
@mAxは、私の更新を見てください。 – Allen
ありがとうございました...それは完全に働きました。
df2 = df.groupby( 'Class')。適用(ラムダx:pd.Series([x [v] * x.wb)/合計(x。wb)for v in var_cols])) – mAx