Ich habe einen Pandas DatenrahmenPandas neue Datenrahmen aus mehreren Gruppen Erstellen von Operationen
test = pd.DataFrame({'d':[1,1,1,2,2,3,3], 'id':[1,2,3,1,2,2,3], 'v1':[10, 20, 15, 35, 5, 10, 30], 'v2':[3, 4, 1, 6, 0, 2, 0], 'w1':[0.1, 0.3, 0.2, 0.1, 0.4, 0.3, 0.2], 'w2':[0.8, 0.1, 0.2, 0.3, 0.1, 0.1, 0.0]})
d id v1 v2 w1 w2
0 1 1 10 3 0.10 0.80
1 1 2 20 4 0.30 0.10
2 1 3 15 1 0.20 0.20
3 2 1 35 6 0.10 0.30
4 2 2 5 0 0.40 0.10
5 3 2 10 2 0.30 0.10
6 3 3 30 0 0.20 0.00
und ich mag einige gewichtete Werte von Gruppe erhalten wie
test['w1v1'] = test['w1'] * test['v1']
test['w1v2'] = test['w1'] * test['v2']
test['w2v1'] = test['w2'] * test['v1']
test['w2v2'] = test['w2'] * test['v2']
Wie kann ich das Ergebnis gut erhalten in ein df. etwas, das
test.groupby('id').sum()['w1v1']/test.groupby('id').sum()['w1']
id
1 22.50
2 11.00
3 22.50
sondern umfasst Spalten für jeden gewichteten Wert, so wie
id w1v1 w1v2 w2v1 w2v2
1 22.50 ... ... ...
2 11.00 ... ... ...
3 22.50 ... ... ...
Irgendwelche Ideen wie
sieht, wie ich dies schnell und einfach erreichen können?