如何为 groupby DataFrame 创建滚动百分比

2024-01-11

我正在尝试计算每种产品的每月变化百分比。这是我到目前为止所拥有的。我将其用于涉及单个产品的 DataFrame。我对如何将计算应用于包含许多产品和许多月份的结果集感到困惑。

示例数据框:

product_desc    activity_month    prod_count
product_a       1/1/2014          53
product_b       1/1/2014          42
product_c       1/1/2014          38
product_a       2/1/2014          26
product_b       2/1/2014          48
product_c       2/1/2014          39
product_a       3/1/2014          41
product_b       3/1/2014          35
product_c       3/1/2014          50

我需要得到的是数据框,其中添加了按月按product_desc变化的百分比:

product_desc    activity_month   prod_count pct_change
product_a       1/1/2014         53 
product_a       2/1/2014         26         0.490566038
product_a       3/1/2014         41         1.576923077
product_b       1/1/2014         42 
product_b       2/1/2014         48         1.142857143
product_b       3/1/2014         35         0.729166667
product_c       1/1/2014         38 
product_c       2/1/2014         39         1.026315789
product_c       3/1/2014         50         1.282051282

我可以使用单个 Product_desc 在数据帧上计算此值:

df['change_rate1'] = df['prod_count'].shift(-1)/df['prod_count']
df['pct_change'] = df['change_rate1'].shift(1)
df = df.drop('change_rate1',1)

这是我现在正在尝试的:

df_grouped = df.groupby(['product_desc','activity_month'])

for product_desc, activity_month in df_grouped:
   df['change_rate1'] = df_grouped['prod_count'].shift(-1)/df_grouped['prod_count']

但是,我在 for 语句的最后一行收到“NotImplementedError”。

任何有关如何正确计算此值的建议都将受到赞赏。


嗯,看起来在组内,每个月有一次观察,您想要从一个月到下一个月的百分比变化。你可以用groupby/apply通过对“product_desc”进行分组,然后使用内置的pct_change() method:

>>> df['pct_ch'] = df.groupby('product_desc')['prod_count'].pct_change() + 1

注意,我加了1pct_change()方法,因为它计算净变化百分比。我将打印出一个排序版本,以便它符合您的预期输出:

>>> df.sort('product_desc')

  product_desc activity_month  prod_count    pct_ch
0    product_a     2014-01-01          53       NaN
3    product_a     2014-02-01          26  0.490566
6    product_a     2014-03-01          41  1.576923
1    product_b     2014-01-01          42       NaN
4    product_b     2014-02-01          48  1.142857
7    product_b     2014-03-01          35  0.729167
2    product_c     2014-01-01          38       NaN
5    product_c     2014-02-01          39  1.026316
8    product_c     2014-03-01          50  1.282051

在旧版本上pandas你可能需要这样做:

>>> df['pct_ch'] = df.groupby('product_desc')['prod_count'].apply(lambda x: x.pct_change() + 1)

或者您可以按照您的建议使用 Shift 并进行一些小修改:

>>> df['pct_ch'] = df['prod_count'] / df.groupby('product_desc')['prod_count'].shift(1)
>>> df.sort('product_desc')

  product_desc activity_month  prod_count    pct_ch
0    product_a     2014-01-01          53       NaN
3    product_a     2014-02-01          26  0.490566
6    product_a     2014-03-01          41  1.576923
1    product_b     2014-01-01          42       NaN
4    product_b     2014-02-01          48  1.142857
7    product_b     2014-03-01          35  0.729167
2    product_c     2014-01-01          38       NaN
5    product_c     2014-02-01          39  1.026316
8    product_c     2014-03-01          50  1.282051

你不需要参考df['prod_count']在一个groupby,您没有对该列执行任何操作。

在旧版本上pandas你可能需要这样做:

>>> df['pct_ch'] = df.groupby('product_desc')['prod_count'].apply(lambda x: x/x.shift(1))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为 groupby DataFrame 创建滚动百分比 的相关文章

随机推荐

  • 使用来自 C99 的库在 Windows 上使用 TCC 编译文件

    所以最新版本的TCC据说实现了C99的一些功能 但是 我发现它不包括C99的数学库 有没有办法让它在 Windows 上使用更多 C99 的库 我用 google 搜索了一下 发现了一些主要与 Linux 相关的建议 但对于这个项目 我需要
  • org.apache.http.conn.HttpHostConnectException:与 https://jazz.net 的连接被拒绝

    我已将我的工作灯从 5 0 5 升级到 5 0 6 当我在 5 0 5 上工作时 它工作正常 但当我在更新版本的工作灯 5 0 6 中使用相同的代码时 它给了我这个错误 响应 apps services api RTMLight commo
  • 从 XCode 中的 .strings 文件读取字符串

    我是 iOS 新手 我有一个 strings 文件 其中存储了一个免责声明 当我的应用程序打开时可以查看该免责声明 但是 我无法弄清楚如何从 disclaimer strings 文件中调用 免责声明 字符串 如有帮助 将不胜感激 另外 感
  • 如何通过哈希比较限制 API 密钥的使用

    我目前正在使用Spotify in my Android应用程序 但我需要使用Secret为了刷新令牌等等 我想传达我的秘密Backend到应用程序 因此秘密并不驻留在APK并且反编译时找不到 我读过很多关于保护应用程序中的秘密的内容 通过
  • RobotFramework:超出启动关键字的最大限制

    我是 RobotFramework 的新手 我正在尝试做一个简单的测试 使用 Log 关键字打印 Hello world 并从 java 类获取值 我在 Ride 上使用 jybot Settings Library robot MyTes
  • 是的,嵌套模式验证

    我正在尝试根据用户选择的选择选项有条件地验证对象 问题是我正在渲染货币列表 并且在尝试将其设为必填字段时遇到巨大困难 因为我必须传入一个空的对象开始 我的代码堆栈是 React Formik 和 Yup 所有最新版本 对象模式 catego
  • 防止同时触摸多个按钮

    在iOS中 是否有办法防止包含多个按钮 兄弟 的UIView同时被触摸 例如 可以通过两次触摸同时点击两个并排的不重叠按钮 设置 UIView exclusiveTouch
  • 如何为 Maven/Surefire 和 Eclipse 加载不同的 logback 配置

    我想在 Eclipse 和 Maven surefire 插件 中为我的单元测试使用不同的默认 logback 配置 基本上 我希望将测试期间生成的任何日志发送到 Eclipse 中的控制台或 Maven 的文件 目前 我有一个包含两个附加
  • Java Applet 中的背景图像

    如何在 Java Applet 中设置背景图像 假设我希望 background gif 成为我的 java applet 类中的背景 但我该怎么做呢 我认为没有一个函数可以做到这一点 但是您可以扩展一个Panel 它可以充当一个简单的组件
  • backbone.js 的跨浏览器如何?

    我们正在使用多种浏览器类型 网络 移动设备 平板电脑和智能电视 我们正在为我们的 mvc 寻找backbone js backbone js 是否有任何已知的跨浏览器限制 我认为这与 Backbone 关系不大 而与您使用的 HTML 和
  • 什么是陈旧状态?

    我在维基百科上阅读有关对象池模式的内容 http en wikipedia org wiki Object pool http en wikipedia org wiki Object pool 并且它提到 危险的陈旧状态 陈旧 状态到底是
  • Python 2 和 Python 3 中 exec 函数的行为

    以下代码给出了不同的输出Python2 and in Python3 from sys import version print version def execute a st b 42 exec b nprint b b format
  • 使用 npm 如何将包下载为 zip 格式,并将其所有依赖项包含在包中

    我想做的是下载包含所有依赖项的软件包 以便将它们传输到另一台没有互联网连接的计算机上并安装在那里 所以情况是 下载包 到 zip tarball 任何文件 而不安装它 下载的文件中包含其所有依赖项 正确的版本及其依赖项的依赖项 将文件传输到
  • Git:无法从一台计算机推送

    我的一位同事在他的机器上从 git 推送更改时遇到了问题 如果他登录到另一台机器 他可以很好地推送 但是从他的机器上 当他尝试推送时 他会收到以下错误 D Projects test1 best practices gt git push
  • 当有许多(数千个)SVG 元素时,为什么 D3.js 平移比缩放慢?

    当 svg 包含许多元素时 D3 js 平移似乎比缩放更慢且更不稳定 我在 JSFiddle 上做了一个例子http jsfiddle net cornhundred cfeu1ws2 10 http jsfiddle net cornhu
  • 如何将原始套接字绑定到特定端口?

    我目前正在从事一项编程任务 作业是实现客户端 网络模拟器和服务器 客户端将数据包传递给网络模拟器 网络模拟器将数据包传递给服务器 反之亦然 分配的前提是我只能使用原始套接字 所以我将创建自己的 IP 和 UDP 标头 我已经用wiresha
  • 使用where语句批量更新mysql

    如何批量更新mysql数据 如何定义这样的东西 UPDATE table WHERE column1 somevalues SET column2 othervalues 具有一些值 例如 VALUES 160009 160010 1600
  • webflux 请求处理程序中 ServerRequest 返回 null 主体

    我已经在 Spring WebFlux 应用程序中设置了身份验证 身份验证机制似乎工作正常 例如 以下代码用于设置安全Web过滤器链 Bean public SecurityWebFilterChain securityWebFilterC
  • AngularJS - 充当单选按钮的 3 按钮组

    使用离子框架 http ionicframework com 我正在尝试创建一组充当单选按钮的三个按钮 如果我点击早餐 我希望午餐和晚餐恢复到正常 白色 状态 早餐变成蓝色 使用我当前的代码 我无法让这个功能工作 尽管我可以让按钮稍微随机地
  • 如何为 groupby DataFrame 创建滚动百分比

    我正在尝试计算每种产品的每月变化百分比 这是我到目前为止所拥有的 我将其用于涉及单个产品的 DataFrame 我对如何将计算应用于包含许多产品和许多月份的结果集感到困惑 示例数据框 product desc activity month