- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
问题:
概述:
我正在寻找一种矢量化的方法来获取某个条件出现的第一个日期。当 dfDays
中的价格是 >
dfWeeks.target
中指定的目标价格时,就会找到条件。此条件必须在目标设定日期之后达到。
有没有一种方法可以在 Pandas 中以矢量化方式使用 apply
或类似方法进行以下时间序列分析?
数据:
生成freq='D'
测试数据帧
np.random.seed(seed=1)
rng = pd.date_range('1/1/2000', '2000-07-31',freq='D')
weeks = np.random.uniform(low=1.03, high=3, size=(len(rng),))
ts2 = pd.Series(weeks
,index=rng)
dfDays = pd.DataFrame({'price':ts2})
现在创建一个重采样的 freq='1W-Mon'
数据框
dfWeeks = dfDays.resample('1W-Mon').first()
dfWeeks['target'] = (dfWeeks['price'] + .5).round(2)
使用 reindex
对齐两个 df 上的索引:
dfWeeks = dfWeeks.reindex(dfDays.index)
所以 dfWeeks
是一个包含我们将使用的目标值的数据框
dfWeeks.dropna().head()
price target
2000-01-03 1.851533 2.35
2000-01-10 1.625595 2.13
2000-01-17 1.855813 2.36
2000-01-24 2.130619 2.63
2000-01-31 2.756487 3.26
如果我们关注 dfWeeks
的第一个目标
match = dfDays[dfDays.price >= dfWeeks.target.loc['2000-01-03']]
第一个匹配项是过去的,因此无效,因此 2000-01-12
条目是第一个有效匹配项:
match.head()
price
2000-01-02 2.449039
2000-01-12 2.379882
2000-01-14 2.759891
2000-01-16 2.350821
2000-01-21 2.607467
有没有办法以向量化的方式对 dfWeeks
中的 target
条目执行此操作?
期望的输出:
price target target_hit
2000-01-03 1.851533 2.35 2000-01-12
2000-01-10 1.625595 2.13 2000-01-12
2000-01-17 1.855813 2.36 2000-01-21
2000-01-24 2.130619 2.63 2000-01-25
2000-01-31 2.756487 3.26 nan
最佳答案
Pandas
def find_match(x):
match = dfDays.query('index > @x.name & price >= @x.target')
if not match.empty:
return match.index[0]
dfWeeks.assign(target_hit=dfWeeks.apply(find_match, 1))
numpy
timing = dfWeeks.index.values[:, None] < dfDays.index.values
target_hit = dfWeeks.target.values[:, None] <= dfDays.price.values
matches = timing & target_hit
got_match = matches.any(1)
first = matches.argmax(1)[got_match]
dfWeeks.loc[got_match, 'target_hit'] = dfDays.index.values[first]
dfWeeks
两者都产生
price target target_hit
2000-01-03 1.851533 2.35 2000-01-12
2000-01-10 1.625595 2.13 2000-01-12
2000-01-17 1.855813 2.36 2000-01-21
2000-01-24 2.130619 2.63 2000-01-25
2000-01-31 2.756487 3.26 NaT
2000-02-07 1.859582 2.36 2000-02-09
2000-02-14 1.066028 1.57 2000-02-15
2000-02-21 1.912350 2.41 2000-03-09
2000-02-28 1.446907 1.95 2000-02-29
2000-03-06 2.408524 2.91 2000-03-28
2000-03-13 2.337675 2.84 2000-03-17
2000-03-20 2.620561 3.12 NaT
2000-03-27 2.770113 3.27 NaT
2000-04-03 2.930735 3.43 NaT
2000-04-10 1.834030 2.33 2000-04-12
2000-04-17 2.068304 2.57 2000-04-19
2000-04-24 2.391067 2.89 2000-05-11
2000-05-01 2.518262 3.02 NaT
2000-05-08 1.085764 1.59 2000-05-10
2000-05-15 1.579992 2.08 2000-05-16
2000-05-22 2.619997 3.12 NaT
2000-05-29 1.269047 1.77 2000-05-31
2000-06-05 1.171789 1.67 2000-06-06
2000-06-12 2.175277 2.68 2000-06-20
2000-06-19 1.338879 1.84 2000-06-20
2000-06-26 2.977574 3.48 NaT
2000-07-03 1.160680 1.66 2000-07-04
2000-07-10 2.615366 3.12 NaT
2000-07-17 2.478080 2.98 NaT
2000-07-24 2.899562 3.40 NaT
2000-07-31 2.220492 2.72 NaT
关于python - 查询日期和价格数据的矢量化方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41909097/
我有三张 table 。表 A 有选项名称(即颜色、尺寸)。表 B 有选项值名称(即蓝色、红色、黑色等)。表C通过将选项名称id和选项名称值id放在一起来建立关系。 我的查询需要显示值和选项的名称,而
在mysql中,如何计算一行中的非空单元格?我只想计算某些列之间的单元格,比如第 3-10 列之间的单元格。不是所有的列...同样,仅在该行中。 最佳答案 如果你想这样做,只能在 sql 中使用名称而
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 7 年前。 Improve this ques
我正在为版本7.6进行Elasticsearch查询 我的查询是这样的: { "query": { "bool": { "should": [ {
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 7 年前。 Improve this ques
是否可以编写一个查询来检查任一子查询(而不是一个子查询)是否正确? SELECT * FROM employees e WHERE NOT EXISTS (
我找到了很多关于我的问题的答案,但问题没有解决 我有表格,有数据,例如: Data 1 Data 2 Data 3
以下查询返回错误: 查询: SELECT Id, FirstName, LastName, OwnerId, PersonEmail FROM Account WHERE lower(PersonEm
以下查询返回错误: 查询: SELECT Id, FirstName, LastName, OwnerId, PersonEmail FROM Account WHERE lower(PersonEm
我从 EditText 中获取了 String 值。以及提交查询的按钮。 String sql=editQuery.getText().toString();// SELECT * FROM empl
我有一个或多或少有效的查询(关于结果),但处理大约需要 45 秒。这对于在 GUI 中呈现数据来说肯定太长了。 所以我的需求是找到一个更快/更高效的查询(几毫秒左右会很好)我的数据表大约有 3000
这是我第一次使用 Stack Overflow,所以我希望我以正确的方式提出这个问题。 我有 2 个 SQL 查询,我正在尝试比较和识别缺失值,尽管我无法将 NULL 字段添加到第二个查询中以识别缺失
什么是动态 SQL 查询?何时需要使用动态 SQL 查询?我使用的是 SQL Server 2005。 最佳答案 这里有几篇文章: Introduction to Dynamic SQL Dynami
include "mysql.php"; $query= "SELECT ID,name,displayname,established,summary,searchlink,im
我有一个查询要“转换”为 mysql。这是查询: select top 5 * from (select id, firstName, lastName, sum(fileSize) as To
通过我的研究,我发现至少从 EF 4.1 开始,EF 查询上的 .ToString() 方法将返回要运行的 SQL。事实上,这对我来说非常有用,使用 Entity Framework 5 和 6。 但
我在构造查询来执行以下操作时遇到问题: 按activity_type_id过滤联系人,仅显示最近事件具有所需activity_type_id或为NULL(无事件)的联系人 表格结构如下: 一个联系人可
如何让我输入数据库的信息在输入数据 5 分钟后自行更新? 假设我有一张 table : +--+--+-----+ |id|ip|count| +--+--+-----+ |
我正在尝试搜索正好是 4 位数字的 ID,我知道我需要使用 LENGTH() 字符串函数,但找不到如何使用它的示例。我正在尝试以下(和其他变体)但它们不起作用。 SELECT max(car_id)
我有一个在 mysql 上运行良好的 sql 查询(查询 + 连接): select sum(pa.price) from user u , purchase pu , pack pa where (
我是一名优秀的程序员,十分优秀!