首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >SQL模拟Pandas diff()函数(第1离散差分)[滞后函数]

SQL模拟Pandas diff()函数(第1离散差分)[滞后函数]
EN

Stack Overflow用户
提问于 2018-01-09 01:13:59
回答 2查看 907关注 0票数 2

我正在寻找一种方法来编写SQL查询,将第一个离散的差异应用于最初的系列。通过使用Pandas的.diff()方法,在Python中这是非常容易的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(0,100,size=(10, 2)), columns=list('AB'))

df["diff_A"]=df["A"].diff()
df["diff_B"]=df["B"].diff()

print(df)

我想要的输出在"diff_A""diff_B"列中演示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    A   B  diff_A  diff_B
0  36  14     NaN     NaN
1  32  13    -4.0    -1.0
2  31  87    -1.0    74.0
3  58  88    27.0     1.0
4  44  34   -14.0   -54.0
5   2  43   -42.0     9.0
6  15  94    13.0    51.0
7  46  74    31.0   -20.0
8  60   9    14.0   -65.0
9  43  57   -17.0    48.0

我使用Oracle,但我肯定更喜欢干净的ANSI解决方案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-09 01:23:49

您可以使用解析迟滞函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
with v as (
  select rowid as rn, a, b from tab
)
select
  a, b,
  a - lag(a, 1) over(order by rn) as diff_a,
  b - lag(b, 1) over(order by rn) as diff_b
from v
order by rn;

PS使用一个真正的列(如日期)来排序要好得多,因为可以改变

例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select
  a, b,
  a - lag(a, 1) over(order by inserted) as diff_a,
  b - lag(b, 1) over(order by inserted) as diff_b
from tab;

@MatBailie发布了一个很好的解释

SQL中的数据集是无序的.对于滞后()中的确定性结果,始终使用充分的ORDER子句。(如果不存在此类字段,则应在插入到SQL数据集中的数据时/之前创建一个字段。SQL数据集的无序特性允许大量的可伸缩性选项和优化选项可用。)

SQL Fiddle测试

PS 窗口功能被添加到ANSI/ISO标准SQL:2003中,然后在ANSI/ISO标准SQL:2008中进行扩展。微软在这场游戏中迟到了。DB2、Oracle、Sybase、PostgreSQL和其他产品已经完全实现多年了。Server直到SQL 2012才赶上。

票数 2
EN

Stack Overflow用户

发布于 2018-01-09 02:10:13

我之所以发布这个答案,仅仅是因为我能够在一个SQLFiddle中复制结果,然后是在接受的答案中的注释。除了rowid改变后的事实,是否有一个有效的论点,为什么这个简单的答案不起作用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select
  a, b,
  a - lag(a, 1) over(order by rowid) as diff_a,
  b - lag(b, 1) over(order by rowid) as diff_b
from tab;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48164751

复制
相关文章
pandas dataframe 时间字段 diff 函数
pandas 是数据处理的利器,非常方便进行表格数据处理,用过的人应该都很清楚,没接触的可以自行查阅pandas 官网。
魏守峰
2020/10/30
1.9K0
pandas dataframe 时间字段 diff 函数
pandas 是数据处理的利器,非常方便进行表格数据处理,用过的人应该都很清楚,没接触的可以自行查阅pandas 官网。
魏守峰
2020/10/29
1.3K0
np.diff函数
np.diff函数 数组中a[n]-a[n-1] import numpy as np a=np.array([1, 6, 7, 8, 12]) diff_x1 = np.diff(a) print("diff_x1",diff_x1) # diff_x1 [5 1 1 4] # [6-1,7-6,8-7,12-8] 高维数组同样适用 二维数组 b=np.array([[1, 6, 7, 8, 12],[1, 6, 7, 8, 12]]) diff_x2 = np.diff(b) print("diff
演化计算与人工智能
2020/08/14
8330
pandas函数手册_函数str
七.method参数 method = ‘ffill’ : 是用每一列/行前面的值填充后面的空白 method = ‘bfill’: 是用每一列/行后面的值填充前面的空白
全栈程序员站长
2022/11/10
6890
pandas函数手册_函数str
PHP array_diff() 函数
array_diff() 函数返回两个数组的差集数组。该数组包括了所有在被比较的数组中,但是不在任何其他参数数组中的键值。
用户1448800
2021/08/18
2270
pandas中的drop函数_pandas replace函数
dropna()函数的作用是去除读入的数据中(DataFrame)含有NaN的行。 如下:
全栈程序员站长
2022/10/02
1.5K0
PHP date_diff() 函数
实例 计算两个日期间的差值: <?php $date1=date_create("1984-01-28"); $date2=date_create("1980-10-15"); $diff=date_
用户1448800
2021/08/24
9080
python merge函数_pandas replace函数
在pandas中如果我们想将两个表格按照某一主键合并,我们需要用到merge函数。
全栈程序员站长
2022/11/01
6430
python merge函数_pandas replace函数
sql聚合函数_SQL聚合函数
SQL Aggregate Functions basically operate on multiple columns to perform the operations and serve to represent the output as an entity representing the operation executed.
全栈程序员站长
2022/06/24
2.3K0
sql聚合函数_SQL聚合函数
测开之函数进阶· 第1篇《递归函数》
第一个print(next(g))打印的 0,就是生成器生成的元素。第二个print(next(g))打印的 1 也是生成器生成的元素,None 是print(j)打印的j。
清菡
2021/01/04
6510
测开之函数进阶· 第1篇《递归函数》
PHP array_diff_uassoc() 函数
array_diff_uassoc() 函数用于比较两个(或更多个)数组的键名和键值 ,并返回差集。
用户1448800
2021/08/18
2620
PHP array_diff_key() 函数
array_diff_key() 函数用于比较两个(或更多个)数组的键名 ,并返回差集。
用户1448800
2021/08/18
4330
SQL、Pandas、Spark:窗口函数的3种实现
窗口函数是数据库查询中的一个经典场景,在解决某些特定问题时甚至是必须的。个人认为,在单纯的数据库查询语句层面【即不考虑DML、SQL调优、索引等进阶】,窗口函数可看作是考察求职者SQL功底的一个重要方面。
luanhz
2021/04/26
1.5K0
Pandas的Apply函数——Pandas中最好用的函数
Pandas是Python语言中非常好用的一种数据结构包,包含了许多有用的数据操作方法。而且很多算法相关的库函数的输入数据结构都要求是pandas数据,或者有该数据的接口。
全栈程序员站长
2022/06/25
1K0
Pandas的Apply函数——Pandas中最好用的函数
PHP array_diff_ukey() 函数
array_diff_ukey() 函数用于比较两个(或更多个)数组的键名 ,并返回差集。
用户1448800
2021/08/18
2260
时间序列预测全攻略(附带Python代码)
原文作者:AARSHAY JAIN 36大数据翻译,http://www.36dsj.com/archives/43811 时间序列(简称TS)被认为是分析领域比较少人知道的技能。(我也是几天前才知道它)。但是你一定知道最近的小型编程马拉松就是基于时间序列发展起来的,我参加了这项活动去学习了解决时间序列问题的基本步骤,在这儿我要分享给大家。这绝对能帮助你在编程马拉松中获得一个合适的模型。 文章之前,我极力推荐大家阅读《基于R语言的时间序列建模完整教程》A Complete Tutorial on Ti
机器学习AI算法工程
2018/03/13
14.9K0
时间序列预测全攻略(附带Python代码)
pandas的iterrows函数和groupby函数
iterrows() 是在DataFrame中的行进行迭代的一个生成器,它返回每行的索引及一个包含行本身的对象。
润森
2022/09/22
3.2K0
pandas的iterrows函数和groupby函数
【pandas】pandas中的常见函数
4、pandas.get_dummies(data):将某列数据用one-hot编码表示
西西嘛呦
2020/08/26
2K0
PHP array_diff_assoc() 函数
array_diff_assoc() 函数用于比较两个(或更多个)数组的键名和键值 ,并返回差集。
用户1448800
2021/08/18
1960
pandas drop参数_pandas concat函数
DataFrame.dropna( axis=0, how=‘any’, thresh=None, subset=None, inplace=False)
全栈程序员站长
2022/10/02
7270

相似问题

Pandas: DataFrame差分函数

12

离散滞后窗函数

10

Python离散差分

23

滞后差分变量

13

查询SQL Server滞后函数模拟

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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