然后将熊猫groupby分配

时间:2018-11-27 16:39:24

标签: python r pandas dplyr

我有一个长格式的数据框,其中包含列:日期,行情自动收录器,mcap,rank_mcap。 mcap列为“ marketcap”,用于衡量某只股票的大小,而mcap_rank只是该股票的排名版本(其中1是最大市值)。

我想创建市值加权前10名的资产(例如,S&P10)。在R中,我这样做

df %>%
    filter(day(date) == 1, rank_mcap < 11) %>%
    group_by(date) %>%
    mutate(weight = mcap / sum(mcap)) %>%
    ungroup() %>%

我在大熊猫里做什么?我收到以下错误

  

AttributeError:无法访问“ DataFrameGroupBy”对象的可调用属性“分配”,请尝试使用“应用”方法

当我尝试使用类似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,但没有得出结论。

2 个答案:

答案 0 :(得分:1)

大熊猫如何在R中实现突变

df.query('included == True & date.dt.day == 1').\
    assign(weight = lambda x : x.groupby('date',group_keys=False).
           apply(lambda y: y.mcap / y.mcap.sum()))

答案 1 :(得分:0)

您可以像在 R 中一样使用 datar 来实现:

from datar.all import f, filter, group_by, ungroup, mutate, sum

df >> \
    filter(f.date.day == 1, f.rank_mcap < 11) >> \
    group_by(f.date) >> \
    mutate(weight = f.mcap / sum(f.mcap)) >> \
    ungroup() 

免责声明:我是 datar 软件包的作者。