首先,我是熊猫的新手,但我已经爱上了它。我正在尝试实现与Oracle的滞后功能等效的功能。
假设您有以下DataFrame:
Date Group Data
2014-05-14 09:10:00 A 1
2014-05-14 09:20:00 A 2
2014-05-14 09:30:00 A 3
2014-05-14 09:40:00 A 4
2014-05-14 09:50:00 A 5
2014-05-14 10:00:00 B 1
2014-05-14 10:10:00 B 2
2014-05-14 10:20:00 B 3
2014-05-14 10:30:00 B 4
如果这是一个oracle数据库,而我想创建一个按“ Group”列分组并按Date排序的滞后函数,则可以轻松使用此函数:
LAG(Data,1,NULL) OVER (PARTITION BY Group ORDER BY Date ASC) AS Data_lagged
这将产生下表:
Date Group Data Data lagged
2014-05-14 09:10:00 A 1 Null
2014-05-14 09:20:00 A 2 1
2014-05-14 09:30:00 A 3 2
2014-05-14 09:40:00 A 4 3
2014-05-14 09:50:00 A 5 4
2014-05-14 10:00:00 B 1 Null
2014-05-14 10:10:00 B 2 1
2014-05-14 10:20:00 B 3 2
2014-05-14 10:30:00 B 4 3
在大熊猫中,我可以将日期设置为索引并使用shift方法:
db["Data_lagged"] = db.Data.shift(1)
唯一的问题是,这不会按列分组。即使将日期和组这两列设置为索引,我仍然会在滞后列中获得“ 5”。
有没有办法在熊猫中实现等效的超前和滞后功能?
您可以执行groupby / apply(shift)操作:
In [15]: df['Data_lagged'] = df.groupby(['Group'])['Data'].shift(1)
In [16]: df
Out[16]:
Date Group Data Data_lagged
2014-05-14 09:10:00 A 1 NaN
2014-05-14 09:20:00 A 2 1
2014-05-14 09:30:00 A 3 2
2014-05-14 09:40:00 A 4 3
2014-05-14 09:50:00 A 5 4
2014-05-14 10:00:00 B 1 NaN
2014-05-14 10:10:00 B 2 1
2014-05-14 10:20:00 B 3 2
2014-05-14 10:30:00 B 4 3
[9 rows x 4 columns]
为了获得ORDER BY Date ASC
效果,您必须首先对DataFrame进行排序:
df['Data_lagged'] = (df.sort_values(by=['Date'], ascending=True)
.groupby(['Group'])['Data'].shift(1))
问题内容: 我正在将PHP代码迁移到Google App Engine-Java。 因此,我需要使用Java中的PHP的crypt函数, 因为我已经 使用crypt 将注册用户的所有密码存储在数据库中。 编辑1 :这是我的php密码加密代码: $ password =“ test123”; $ pwd = crypt($ password,$ password); 回声$ pwd; 输出为(在 W
问题内容: 我正在尝试将查询从MySQL移植到SQL SERVER2012。 如何为MySQL的substring_index()编写等效项? MySQL SUBSTRING_INDEX()从给定字符串中返回指定次数的分隔符之前的子字符串。 SUBSTRING_INDEX(str,delim,count) 输出: 问题答案: 尝试基于T-SQL和XQuery()的以下解决方案: T-SQL标量函数
问题内容: 在python中,如果我有一些要基于输入调用的函数,则可以执行以下操作: 那就是我有一个映射到函数的函数名字典,并通过字典查找来调用函数。 如何在Java中执行此操作? 问题答案: 有几种方法可以解决此问题。其中大多数已发布: 命令 -在地图中保留一堆具有execute()或invoke()方法的对象;通过名称查找命令,然后调用方法。 多态性 -比命令更一般的说,您可以在任何相关对象集
问题内容: 我有一个特定的问题。我有一个包含无效值的表。我需要用大于的先前值替换无效值(此处)。 困难在于,使用Update或insert(游标和update可以做到)对我来说是不合适的。我唯一的方法是使用Select语句。 当我将-函数与when一起使用时,我只会得到一列具有正确值的列。 内容: 预期查询结果: 问题答案: 结果 :
问题内容: 我想知道Scala或其著名的数学库之一(例如Spire)是否具有与Go 函数相同的功能 (来自http://tour.golang.org/#4) 如果没有,那么获得相同功能的最“ Scala”方法是什么? 问题答案: 它是Java 库的一部分:
问题内容: 具有向量化if / else的语义(类似于Apache Spark的/ DataFrame方法)。我知道我可以在pandas上使用,但通常会定义自己的API来代替原始函数使用,通常使用/更为方便。 果然,我发现了。但是,乍一看,它具有完全不同的语义。我找不到一种方法来重写使用pandas的最基本的示例: 我是否缺少明显的东西?还是将熊猫命名为一个完全不同的用例,尽管名称与相同? 问题答