首页 > 解决方案 > 选择位于另一个 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

标签: pythonpandasdataframe

解决方案


我正在使用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

推荐阅读