Я хочу сделать несколько агрегатов с помощью функции Group By в пандах - PullRequest
0 голосов
/ 20 июня 2019

Мой набор данных состоит из столбца даты в типе datetime64 [ns];у этого также есть цена и нет.продаж колонки.Я хочу рассчитать месячную VWAP (средневзвешенную цену) акций.(VWAP = сумма (цена * количество продаж) / сумма (количество продаж))

Я применил следующее: - создал новый столбец данных месяца и года, используя функции панд.

Теперь я хочу ежемесячный VWAP из этого набора данных, который я изменил, также он должен различаться по годам.Например,- Март 2016 года и март 2017 года должны иметь свои отдельные месячные значения VWAP.

1 Ответ

0 голосов
/ 20 июня 2019

Начните с определения функции для подсчета vwap за текущий месяц (группа строк):

def vwap(grp):
    return (grp.price * grp.salesNo).sum() / grp.salesNo.sum()

Затем примените ее к группам по месяцам:

df.groupby(df.dat.dt.to_period('M')).apply(vwap)

Используя следующий тест DataFrame:

         dat  price  salesNo
0 2018-05-14  120.5       10
1 2018-05-16   80.0       22
2 2018-05-20   30.2       12
3 2018-08-10   75.1       41
4 2018-08-20   92.3       18
5 2019-05-10   10.0       33
6 2019-05-20   20.0       41

(содержащий данные за одни и те же месяцы разных лет), я получил:

dat
2018-05    75.622727
2018-08    80.347458
2019-05    15.540541
Freq: M, dtype: float64

Как видите, результат содержит отдельных записей за май в оба года из исходных данных.

...