社区首页 >问答首页 >如何按物料组计算正确的变化?

如何按物料组计算正确的变化?
EN

Stack Overflow用户
提问于 2021-05-11 14:47:59
回答 1查看 36关注 0票数 1

我有一个每日价格变化的产品清单。我想通过在不同的时间(每月,每年,...)重新采样来计算产品的价格变化。但是我在第一个时间序列上得到了一个计算错误。

以下是我的两个产品的数据帧示例:

代码语言:javascript
代码运行次数:0
复制
df_change = pd.DataFrame({'date':['2020-04-01', '2020-04-02', '2020-04-03', '2020-04-04', '2020-04-05', '2020-04-01', '2020-04-02', '2020-04-03', '2020-04-04', '2020-04-05'], 
                          'price' : [20, 30, 40, 10, 15, 200, 220, 230, 200, 190],
                          'symbol': ['AI', 'AI', 'AI', 'AI', 'AI', 'PR', 'PR', 'PR', 'PR', 'PR']
                         })
datetime_series = pd.to_datetime(df_change['date'])

以下是每种产品2天重采样的平均价格:

代码语言:javascript
代码运行次数:0
复制
df_change.groupby('symbol').resample('2D').mean():
AI  2020-04-01  25
    2020-04-03  25
    2020-04-05  15
PR  2020-04-01  210
    2020-04-03  215
    2020-04-05  190

并计算这些价格的变化:

代码语言:javascript
代码运行次数:0
复制
df_change.groupby('symbol').resample('2D').mean().pct_change()
AI  2020-04-01  NaN
    2020-04-03  0.000000
    2020-04-05  -0.400000
PR  2020-04-01  13.000000 <=== not correct
    2020-04-03  0.023810
    2020-04-05  -0.116279

但是第一个时间序列"13.000“的产品"PR”的变化是不正确的。改变应该是像第一个产品AI一样的NaN。

PR的变化量"13“是用前一产品AI的最后一次时间序列计算出来的。13 = (210 - 15) / 15

我如何才能正确计算每个产品的每个第一时间序列的变化?(那就是Nan)

EN

回答 1

Stack Overflow用户

发布于 2021-05-11 14:56:34

在计算滚动mean后执行额外的groupby操作,以计算百分比变化

代码语言:javascript
代码运行次数:0
复制
avg = df_change.groupby('symbol').resample('2D').mean()
avg_change = avg.groupby('symbol').pct_change()

或者,您可以在groupby对象的apply方法内执行resamplemean和calculate pct_change

代码语言:javascript
代码运行次数:0
复制
avg_change = df_change.groupby('symbol').apply(lambda x: x.resample('2D').mean().pct_change())

代码语言:javascript
代码运行次数:0
复制
>>> avg_change

                      price
symbol date                
AI     2020-04-01       NaN
       2020-04-03  0.000000
       2020-04-05 -0.400000
PR     2020-04-01       NaN
       2020-04-03  0.023810
       2020-04-05 -0.116279
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67489157

复制
相关文章
MySQL 存储过程进行切换表
DROP PROCEDURE IF EXISTS `sp_revoke_table`$$
PHP开发工程师
2021/05/26
1.7K0
MySQL的存储过程_MySQL创建存储过程
在项目开发中,经常会遇到这样一种场景,当修改A表的一条数据时,需要关联修改B表、C表甚至其他更多表的数据,为什么会这样呢?
全栈程序员站长
2022/11/08
22.3K0
MySQL的存储过程_MySQL创建存储过程
Mysql存储过程查询结果赋值到变量
一个参数的方法 方式 1 DECLARE cnt INT DEFAULT 0; select count(*) into cnt from test_tbl; select cnt; 方式 2 set @cnt = (select count(*) from test_tbl); select @cnt; 方式 3 select count(*) into @cnt1 from test_tbl; select @cnt1; 多个列的情况下似乎只能用 into 方式 select max(status),
似水的流年
2019/12/05
8.8K0
mysql变量声明、存储过程、触发器
和存储过程一样, 都是嵌入到mysql中的一段程序, 区别就是存储过程需要显式调用, 而触发器式根据对表的相关操作自动激活执行.
友儿
2022/09/28
1.7K0
mysql存储过程----三种定义变量方式
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
逝兮诚
2019/10/30
2.8K0
创建/更新存储过程
说明:IN 表示输入参数,OUT表示输出参数,比如存储返回值的变量,IN OUT 表示输入输出参数(注:都不区分大小写)
授客
2022/11/02
2.9K0
Mysql的存储过程
参考:https://www.runoob.com/w3cnote/mysql-stored-procedure.html
别先生
2021/12/09
6.7K0
mysql存储过程执行_mysql存储过程不执行
查看event是否开启: show variables like ‘%sche%’;
全栈程序员站长
2022/10/02
16.7K0
MySQL:MySQL 存储过程
  <1>存储过程一旦调试完成后,就可以稳定运行,(前提是,业务需求要相对稳定,没有变化)
全栈程序员站长
2022/09/06
16.1K0
MySQL:MySQL 存储过程
MySQL存储过程
存储过程体包含了在过程调用时必须执行的语句,例如:dml、ddl语句,if-then-else和while-do语句、声明变量的declare语句等。
看、未来
2021/12/05
10.1K0
MySQL存储过程
SQL语句需要先编译然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。
流柯
2018/08/30
13.7K0
MySQL存储过程
MySQL 存储过程
  MySQL 5.0 版本开始支持存储过程。存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。存储过程是为了完成特定功能的 SQL 语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。
Demo_Null
2020/09/28
13.4K0
MySQL 存储过程
MySQL存储过程
1、提高代码的重用性 2、简化操作 3、减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率
程序猿的栖息地
2022/04/29
8.9K0
mysql存储过程
(如果存储过程存在删除后创建!如果不写只能执行一次) 2.DELIMITER //
用户5899361
2020/12/07
9.4K0
Mysql存储过程
1、添加存储过程 DELIMITER // CREATE PROCEDURE AddLLdata( in L_Longitude double , in L_Latitude double, IN L_Elevation double, IN L_LaserHeight double , IN L_FollowHeight double , IN L_PlaneId varchar(255), IN L_FlyDate longtext ) BEGIN insert into lldata(Lon
用户7053485
2020/06/19
8.8K0
MySQL 存储过程
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升
星哥玩云
2022/09/15
37.3K0
MySQL 存储过程
mysql存储过程
1)“存储过程和函数”:类似于java中的方法,python中的函数。 2)“使用存储过程的好处”:   ① 提高代码的重用性;   ② 简化操作;   ③ 减少了编译次数,并且减少了和数据库服务器的连接次数,提高了效率。    注意:每执行一句sql语句,就会连接mysql服务器一次。 3)“存储过程的含义”:一组预先编译好的sQL语句的集合。
数据分析与统计学之美
2022/05/09
11.7K0
mysql存储过程
MySQL(存储过程)
存储过程是一组已经预先编译好的SQL语句的集合,可以理解为批处理语句(增加流程控制语句),一般在复杂的业务逻辑中才会使用存储过程。
全栈开发日记
2022/05/12
11.8K0
MySQL(存储过程)
MySQL存储过程
可惜啊!MySQL目前并不支持在SQL语句中存在流控制语句,例如上面的IF NOT EXISTS THEN END IF;让人痛心疾首。但是我们可以使用存储过程完成上面要求的功能。
恋喵大鲤鱼
2018/08/03
11.3K0
MySQL存储过程
【MySQL】MySQL的存储过程(1)
MySQL 5.0 版本开始支持存储过程。 简单的说,存储过程就是一组SQL语句集,功能强大,可以
陶然同学
2023/02/24
1.8K0

相似问题

如何根据键列表进行不同的mysql行更新

10

如何设置mysql存储过程以便使用变量进行更新

14

用于更新变量的MYSQL存储过程为0

110

MySQL存储过程变量

33

MySQL存储过程变量

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文