python - 按应用于索引的条件过滤行
问题描述
我有一个以日期为索引的 DataFrame:
VL
2018-02-05 101.56093
2018-12-31 95.87728
2019-01-04 96.29820
2019-01-11 97.23475
2019-01-18 98.39828
2019-01-25 98.66896
2019-01-31 99.12407
2019-02-01 99.13224
2019-02-08 99.06382
2019-02-15 99.79966
我需要过滤行,以便对于带有 date 的每一行,如果DataFrameD
中存在该行,则保留它D-7
。
例子:
2019-02-15
会保留,因为2019-02-08
存在2019-01-31
将被过滤为2019-01-24
不存在。
我已经使用循环实现了这一点,但我想知道是否有更多面向熊猫的方式来进行这种过滤。
解决方案
IIUC,您可以使用pd.Timedelta
和isin
:
df[(df['date'] - pd.Timedelta(days=7)).isin(df['date'])]
输出:
date VL
3 2019-01-11 97.23475
4 2019-01-18 98.39828
5 2019-01-25 98.66896
7 2019-02-01 99.13224
8 2019-02-08 99.06382
9 2019-02-15 99.79966
如果日期在索引中,请使用:
df[(df.index - pd.Timedelta(days=7)).isin(df.index)]
输出:
VL
date
2019-01-11 97.23475
2019-01-18 98.39828
2019-01-25 98.66896
2019-02-01 99.13224
2019-02-08 99.06382
2019-02-15 99.79966
推荐阅读
- ionic-framework - 我可以在 service-worker 同步上使用 ionic/storage 吗?
- javascript - 尝试使用 JavaScript 添加删除功能,当我单击它时需要删除整个表单。顺便说一句,我正在使用引导程序
- python - 查找字符串中所有占位符的pythonic方法
- firebase - 将类组件的“上传图像到firebase”代码修改为功能组件
- php - 使用 mysqli_fetch 的原因是什么?
- java - 如何制作一个简单的 gradle 构建脚本来编译 java 程序?
- r - 在 R 中有效地重塑非标准虚拟编码矩阵或表格
- javascript - map() 中的 reactjs-jsx 计数索引
- python - 如果文件与给定的文件名匹配,如何打开文件(使用语音识别获得的文件名)
- go - 在 Go Gorm 中添加具有多对多反向引用的记录