python - 如何在熊猫矢量化中计算日期索引和未来一个月的日期之间的行以将它们添加为列?
问题描述
我有一个带有日期索引的数据框( df )。我想实现以下目标:
1.取 Dates 列并添加一个月 -> 例如nxt_dt = df.index + np.timedelta64(month=1) 并调用 df.index curr_dt
2.在 Dates 中找到 >= nxt_dt 的最近条目。
3计算curr_dt和nxt_dt之间的行数,并将它们放入df的列中。
结果应该如下所示:
px_volume listed_sh ... iv_mid_6m '30d'
Dates ...
2005-01-03 228805 NaN ... 0.202625 21
2005-01-04 189983 NaN ... 0.203465 22
2005-01-05 224310 NaN ... 0.202455 23
2005-01-06 221988 NaN ... 0.202385 20
2005-01-07 322691 NaN ... 0.201065 21
不用说, df中只有日期/行有观察结果。
我可以想出一些不同的方法来循环完成这项工作,但是由于我使用的数据非常大,我真的很想避免遍历行来填充它们。
pandas 有没有办法将这个完成矢量化?
解决方案
如果您可以重新索引这应该可以完成工作:
import numpy as np
import pandas as pd
df = pd.DataFrame({'date': ['2020-01-01', '2020-01-08', '2020-01-24', '2020-01-29', '2020-02-09', '2020-03-04']})
df['date'] = pd.to_datetime(df['date'])
df['value'] = 1
df = df.set_index('date')
df = df.reindex(pd.date_range('2020-01-01','2020-03-04')).fillna(0)
df = df.sort_index(ascending=False)
df['30d'] = df['value'].rolling(30).sum() - 1
df.sort_index().query("value == 1")
给出:
value 30d
2020-01-01 1.0 3.0
2020-01-08 1.0 2.0
2020-01-24 1.0 2.0
2020-01-29 1.0 1.0
2020-02-09 1.0 NaN
2020-03-04 1.0 NaN
推荐阅读
- sql - SQL:更新 GROUP BY 以包含基于另一列的最大值的值
- javascript - Mocha 测试未运行“try..finally”子句
- r - 在 R 中的 ggplot2 中向折线图添加第二个图例
- ios - 检测矩形时崩溃,Swift,iOS
- ios - 为什么 SnapKit 的“makeConstraints”函数的闭包中没有“self”?
- wordpress - 访问具有特定帖子类型的所有内容(Wordpress)
- excel - 全部刷新不会更新 Excel 2016 中的可刷新 Web 查询表
- firebase - Firebase 帐户创建限制
- xpath - 带有 onclick 的图像的相对 xpath 是什么?
- javascript - 如何实现启用 Meteor Tracker 的功能?