繁体   English   中英

Pandas groupby 然后分配

[英]Pandas groupby then assign

我有一个带有列的长格式数据框:日期、股票代码、mcap、rank_mcap。 mcap 列是“市值”并衡量某只股票的规模,而 mcap_rank 只是它的排名版本(其中 1 是最大的市值)。

我想创建市值排名前 10 的加权资产(例如 S&P10)。 在 RI 中执行此操作

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

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

AttributeError:无法访问“DataFrameGroupBy”对象的可调用属性“assign”,请尝试使用“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并没有得出结论。

Pandas 如何在 R 中实现 Mutate

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()))

您可以使用datar以与在 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包的作者。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM