Python Pandas 如何将 groupby 操作结果分配回父数据帧中的列?

2023-12-27

我在 IPython 中有以下数据框,其中每一行都是一只股票:

In [261]: bdata
Out[261]:
<class 'pandas.core.frame.DataFrame'>
Int64Index: 21210 entries, 0 to 21209
Data columns:
BloombergTicker      21206  non-null values
Company              21210  non-null values
Country              21210  non-null values
MarketCap            21210  non-null values
PriceReturn          21210  non-null values
SEDOL                21210  non-null values
yearmonth            21210  non-null values
dtypes: float64(2), int64(1), object(4)

我想应用一个 groupby 操作来计算“yearmonth”列中每个日期的所有内容的上限加权平均回报。

这按预期工作:

In [262]: bdata.groupby("yearmonth").apply(lambda x: (x["PriceReturn"]*x["MarketCap"]/x["MarketCap"].sum()).sum())
Out[262]:
yearmonth
201204      -0.109444
201205      -0.290546

但随后我想将这些值“广播”回原始数据框中的索引,并将它们保存为日期匹配的常量列。

In [263]: dateGrps = bdata.groupby("yearmonth")

In [264]: dateGrps["MarketReturn"] = dateGrps.apply(lambda x: (x["PriceReturn"]*x["MarketCap"]/x["MarketCap"].sum()).sum())
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/mnt/bos-devrnd04/usr6/home/espears/ws/Research/Projects/python-util/src/util/<ipython-input-264-4a68c8782426> in <module>()
----> 1 dateGrps["MarketReturn"] = dateGrps.apply(lambda x: (x["PriceReturn"]*x["MarketCap"]/x["MarketCap"].sum()).sum())

TypeError: 'DataFrameGroupBy' object does not support item assignment

我意识到这个幼稚的任务不应该起作用。但是,将 groupby 操作的结果分配到父数据帧上的新列中的“正确”Pandas 习惯用法是什么?

最后,我想要一个名为“MarketReturn”的列,该列将成为所有具有与 groupby 操作的输出匹配的日期的索引的重复常量值。

实现这一目标的一种技巧如下:

marketRetsByDate  = dateGrps.apply(lambda x: (x["PriceReturn"]*x["MarketCap"]/x["MarketCap"].sum()).sum())

bdata["MarketReturn"] = np.repeat(np.NaN, len(bdata))

for elem in marketRetsByDate.index.values:
    bdata["MarketReturn"][bdata["yearmonth"]==elem] = marketRetsByDate.ix[elem]

但这很慢,很糟糕,而且不符合 Python 风格。


In [97]: df = pandas.DataFrame({'month': np.random.randint(0,11, 100), 'A': np.random.randn(100), 'B': np.random.randn(100)})

In [98]: df.join(df.groupby('month')['A'].sum(), on='month', rsuffix='_r')
Out[98]:
           A         B  month       A_r
0  -0.040710  0.182269      0 -0.331816
1  -0.004867  0.642243      1  2.448232
2  -0.162191  0.442338      4  2.045909
3  -0.979875  1.367018      5 -2.736399
4  -1.126198  0.338946      5 -2.736399
5  -0.992209 -1.343258      1  2.448232
6  -1.450310  0.021290      0 -0.331816
7  -0.675345 -1.359915      9  2.722156
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python Pandas 如何将 groupby 操作结果分配回父数据帧中的列? 的相关文章

随机推荐

  • 将子域从 Route53 指向 CloudFront,而不使用 CNAME

    我有一个子域 dev example com 我需要将其指向我的 cloudfront 发行版 xyz cloudfront net 我做了以下步骤 1 创建了cloudfront发行版 创建云前端分发时 未在 Cname 字段中指定任何内
  • 无法使 Laravel 4 在本地主机上运行

    在阅读 Laravel4 beta 发布的公告后 我第一次尝试 Laravel 我跟着这些步骤 http four laravel com 我安装了 Composer 和 Laravel 及其所需的所有依赖项 我把 laravel 放进去
  • Maven 的 versions:display-dependency-updates 的 Ivy 等价物是什么?

    我有一个 ivy xml 文件 在其中明确指定我的依赖项 Ivy 中是否内置了任何功能 可以让我发现或自动更新过时的依赖项 我不想使用latest release 因为我想要一个完全稳定且可重现的构建 但每隔一段时间我就会想要更新一些依赖项
  • 现在,Arc Welder 无法在 Windows 上启动测试应用程序

    昨天 2015 年 10 月 19 日下午 06 00 ARC Welder 应用程序开始无法启动应用程序 由于某种原因 现在 当我单击 测试 时 Windows 10 上没有任何反应 我也在 MAC Windows 7 上进行了测试 并且
  • 执行 static_assert 模板类型是另一个模板

    我如何static assert像这样 如果 Boost 不支持 C 或 C 11 中的新功能 也许 Boost 支持它 template
  • 铸造未知类型的节点

    在使用 Neo4j 时 我能够创建带有标签的节点数组 然后在这些节点之间创建关系 这些标签本质上是到我的 POCO 的映射 Dog 标签与 C 中的 Dog POCO 相关 并且这些 POCO 从仅包含 ID 属性的简单基本 POCO 实现
  • 特定 bin 内 numpy 数组的元素数量

    我有一个乐团sorted 一维 数组长度不等 say M0 M1 and M2 我想找到每个数组有多少个元素在特定数字范围内 其中数字范围由另一个已排序数组的相邻元素 say zbin 我想知道什么是最快的方式为了达成这个 在这里 我给出了
  • MediaStore.Images.Media.insertImage 之后的文件名

    我在用MediaStore Images Media insertImage ContentResolver cr String imagePath String name String description 功能将新创建的图像插入到图库
  • Intersystems caché - 以编程方式创建新类

    是否可以编写 ObjectScript 方法 该方法将在命名空间中创建新类并编译它 我的意思是以编程方式创建新类并存储它 如果是这样 我可以稍后使用 ObjectScript 编辑此类 并重新编译 吗 原因 我在字符串变量中定义了类结构 我
  • Laggy Lazy Column Android Compose

    我已经创建了一个完整的应用程序Jetpack 组合 然而 现场的表演Lazy Column非常糟糕 而且没有任何意义 Lazy Column应该是替代RecyclerView but RecyclerView目前效果好多了 我制造了一个La
  • 测量 flutter 应用程序启动时间

    我正在寻找某种方法来测量应用程序的启动时间 从单击应用程序图标的那一刻直到用户可以看到登录页面的那一刻 Run flutter run trace startup profile 跟踪输出保存为名为的 JSON 文件start up inf
  • 如何使用 monodroid 将应用程序添加到“共享”菜单

    我的解决方案基于这篇文章 http twigstechtips blogspot com 2011 10 android sharing images or files through html http twigstechtips blo
  • 字体粗细

    我正在使用购买字体 Museo Sans 作为我正在开发的应用程序中的自定义字体 我购买时给我的文件包含不同粗细的网络字体文件 MuseoSans100Regular MuseoSans300Regular 等 font face 中有没有
  • 链接到没有锚标记的网页上的任意内容

    我正在寻找一种方法来链接到网页上特定范围的单词 图像或其他任意内容 一种替代方法是在页面上引入大量锚点 但我可以接受需要 JavaScript 的解决方案 最好也是突出目标内容的一种 如果页面内容已被修改并且链接不再有效 那么最好有某种保护
  • 污染 $scope 对象会影响性能吗?

    我有一个控制器 其中 scope 对象用于存储仅在同一控制器中本地使用的方法和值 有很多这样的事情正在发生 scope foo something scope bar something else 等等 这些值均未在视图中使用 我的问题是污
  • 在 Bash 中以字符串形式执行命令

    我正在测试一个简短的 bash 脚本 我想将字符串作为命令执行 bin bash echo AVR GCC elf main elf c main c gcc avr gcc mmcu atmega128 Wall Os o elf c e
  • aspx页面中的变量范围

    这是为什么scriptPath变量是超出范围在代码的底部 它不应该在整个页面的范围内吗 在 MVC 中 如果我将其标记在页面顶部 例如 string scriptPath assets scripts gkoConfig GkoConfig
  • 如何更改 p:barChart yaxis-tick 颜色

    如何更改 barChart yaxis tick 颜色 jqplot axis jqplot yaxis jqplot yaxis tick color green 我尝试了我能找到的任何选项 也使用 Firebug 但没有任何效果 任何想
  • HTML/JavaScript UI 小部件 GUI 构建器 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Python Pandas 如何将 groupby 操作结果分配回父数据帧中的列?

    我在 IPython 中有以下数据框 其中每一行都是一只股票 In 261 bdata Out 261