python - 选择位于另一个 DataFrame 中定义的范围之间的行
问题描述
如何获得适合另一个数据框范围的数据框行?例如:
import pandas as pd
df1 = pd.DataFrame({
'date': [
pd.Timestamp(2019,1,1),
pd.Timestamp(2019,1,2),
pd.Timestamp(2019,1,3),
pd.Timestamp(2019,2,1),
pd.Timestamp(2019,2,5)
]
})
df2 = pd.DataFrame({
'from_date': [pd.Timestamp(2019,1,1), pd.Timestamp(2019,2,1)],
'to_date': [pd.Timestamp(2019,1,2), pd.Timestamp(2019,2,1)]
})
数据:
> df1
date
0 2019-01-01 <- I want this
1 2019-01-02 <- and this
2 2019-01-03
3 2019-02-01 <- and this
4 2019-02-05
> df2
from_date to_date
0 2019-01-01 2019-01-02
1 2019-02-01 2019-02-01
范围可以相互重叠。df1
我想找到落在任何范围内的所有行df2
。我试过了:
df1[df1['date'].between(df2['from_date'], df2['to_date'])]
但这导致了一个错误:
ValueError: Can only compare identically-labeled Series objects
解决方案
我正在使用numpy
广播
s2_1=df2.from_date.values
s2_2=df2.to_date.values
s1=df1.values[:,None]
df1[np.any((s1>=s2_1)&(s1<=s2_2),-1)]
Out[35]:
date
0 2019-01-01
1 2019-01-02
3 2019-02-01
推荐阅读
- azure-devops - 您将如何访问与发布管道中的构建相关的工作项(功能、用户故事、错误或任务)的属性?
- python-3.x - 用http.server如何访问被调用的IP地址?
- spring-boot - 如何根据 Application.yaml 中的另一个属性设置属性名称
- sql - 如何在 SQLite 中对类似于 Postgresql 中的 ROW_NUMBER 窗口函数的一些值进行排名?
- vbscript - 读取 AR System Database 并通过 VBScript 导出为 TXT 文件
- visual-studio-code - 为什么 vscode 在其构建中不包含 ffmpeg?
- schema - 从 sch 文件中获取失败的断言
- python-3.x - 从跨度标题中抓取信息
- python - python 多处理似乎不适用于类
- amazon-web-services - Kibana 运行状况为 RED