Я новичок в Pandas и не до конца понимаю, как работает pd.groupby.
Скажем, у меня есть датафрейм с датой и временем:
Date City Sales Price
2018-01-01 NY 100 1
2018-01-01 NY 120 2
2018-01-01 NY 85 1.4
2018-01-01 LA 90 1.5
2018-01-01 SF 90 1
2018-01-01 SF 75 1
2018-01-02 NY 110 2
2018-01-02 NY 130 1.8
2018-01-02 NY 190 1.1
2018-01-02 LA 100 0.9
2018-01-02 LA 110 1.2
2018-01-02 LA 120 1.0
2018-01-02 LA 50 1.8
2018-01-02 SF 120 1.1
2018-01-03 NY 90 1.1
2018-01-03 LA 90 1.5
...
and so on
Итак, у меня есть несколько городов и несколько продаж в каждом городе по разной цене.
Мне нужен новый фрейм данных, который будет содержать статистику по дням
Цена (средняя = Сумма (Цена) / N) и
mean_weighted = SUMM (цена * продажи) / SUMM (продажи) или как вариант:
нормальные параметры распределения) для каждого города и даты.
Так бы это выглядело
Date NY_mean NY_mean_w LA_mean LA_mean_w SF_mean SF_mean_w
2018-01-01 1.466 1.53 1.5 1.5 1 1
2018-01-02 1.633 1.54 1.03 and so on
2018-01-03 ...
2018-01-04 ...
2018-01-05 ...
...
Есть ли способ избежать фортрановских суммирований с вложенными циклами и подпрограммами? Я пытаюсь (только для среднего значения):
import datetime
import pandas as pd
data = pd.read_pickle('path/data.pkl') # here is original data
index = pd.date_range(start = '2013-01-01', end = '2015-12-31', freq='D')
names = data.City.unique() # unique names
data_stat = pd.DataFrame(index=index, columns=columns)
data_stat = data_stat.fillna(0)
for nm in names: # iterate by name
print(nm)
data_stat.name = data [(data.City == nm)].groupby(Data).Price.mean()
data_stat.head()
Но это дает мне NaN во всех клетках.
Буду признателен за любую помощь в этом.