У меня есть фрейм данных в длинном формате со столбцами: дата, тикер, mcap, rank_mcap.Столбцы mcap - это «marketcap» и измеряют, насколько велика определенная акция, а mcap_rank - это просто ранжированный ее вариант (где 1 - самая большая рыночная капитализация).
Я хочу создать 10 активов, взвешенных по рыночной капитализации (например, S & P10).В РИ делают это
df %>%
filter(day(date) == 1, rank_mcap < 11) %>%
group_by(date) %>%
mutate(weight = mcap / sum(mcap)) %>%
ungroup() %>%
Что мне делать в пандах?Я получаю следующую ошибку
AttributeError: Невозможно получить доступ к вызываемому атрибуту 'assign' объектов 'DataFrameGroupBy', попробуйте использовать метод apply
, когда я сделаю это дляаналогичный подход, как метод R, а именно в python:
df.\
query('included == True & date.dt.day == 1'). \
groupby('date').\
assign(w=df.mcap / df.mcap.sum())
Я изучал http://pandas.pydata.org/pandas-docs/stable/comparison_with_r.html и не пришел к выводу.