python - 选择落在另一个 DataFrame 中定义的范围之间的行

标签 python pandas 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

关于python - 选择落在另一个 DataFrame 中定义的范围之间的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55615336/

相关文章:

python - DNS 响应未到达目的地

python - 使用无缓冲 shell 重定向时,stdout 和 stderr 不会进入文件?

Python线程无法取消

python - 如何显示 1 列的值相对于 Python 中 Excel 工作表中某些其他列中存在的特定值?

python - Pandas 根据日期范围 +/- x 天进行计数和求和

python - sqlalchemy 分页

python - pandas 中是否有函数语法用于根据整数位置设置系列值?

Python:连接字符串列表if else oneliner

python - 用 Pandas DataFrame 中出现频率最高的单词替换单元格

Python:如何从数据帧中行查找数据并根据列匹配在另一个数据帧中相乘