Python 可以在数据帧中使用重叠吗?
Python 3.7, 熊猫25 我有一个Pandas数据框,其中包含startdate和enddate列。我正在寻找与变量范围重叠的范围。在不冗长和使用and/OR组合一系列大于/小于语句以过滤掉所需行的情况下,我希望使用某种间隔“重叠”。熊猫似乎具有以下功能: 以下测试工作:Python 可以在数据帧中使用重叠吗?,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,Python 3.7, 熊猫25 我有一个Pandas数据框,其中包含startdate和enddate列。我正在寻找与变量范围重叠的范围。在不冗长和使用and/OR组合一系列大于/小于语句以过滤掉所需行的情况下,我希望使用某种间隔“重叠”。熊猫似乎具有以下功能: 以下测试工作: range1 = pd.Interval(pd.Timestamp('2017-01-01 00:00:00'),pd.Timestamp('2018-01-01 00:00:00'),closed='both')
range1 = pd.Interval(pd.Timestamp('2017-01-01 00:00:00'),pd.Timestamp('2018-01-01 00:00:00'),closed='both')
range2 = pd.Interval(pd.Timestamp('2016-01-01 00:00:00'),pd.Timestamp('2017-01-01 00:00:00'),closed='both')
range1.overlaps(range2)
但是,当我将其应用于dataframe列时,它不会。我不确定我的语法是否有错误,或者这是否不能应用于数据帧。以下是我尝试过的一些事情(并收到了一系列错误):
有人能告诉我一个有效的方法来实现这一点吗
根据请求,数据帧输出如下所示:
record startdate enddate
0 99 2017-07-01 2018-06-30
1 280 2018-08-01 2021-07-31
2 100 2017-07-01 2018-06-30
3 281 2017-07-01 2018-06-30
您需要从
df.startdate
和df.enddate
创建IntervalIndex
,并对reporttest\u范围使用overlaps
。您的示例返回所有true,因此我为False
case添加了行
Sample df:
record startdate enddate
0 9931 2017-07-01 2018-06-30
1 28075 2018-08-01 2021-07-31
2 10042 2017-07-01 2018-06-30
3 28108 2017-07-01 2018-06-30
4 28109 2016-07-01 2016-12-30
5 28111 2017-07-02 2018-09-30
iix = pd.IntervalIndex.from_arrays(df.startdate, df.enddate, closed='both')
iix.overlaps(reporttest_range)
Out[400]: array([ True, True, True, True, False, True])
使用它仅拾取重叠行
df[iix.overlaps(reporttest_range)]
Out[401]:
record startdate enddate
0 9931 2017-07-01 2018-06-30
1 28075 2018-08-01 2021-07-31
2 10042 2017-07-01 2018-06-30
3 28108 2017-07-01 2018-06-30
5 28111 2017-07-02 2018-09-30
你能分享几行我的数据框吗?谢谢-这正是我需要的。
df[iix.overlaps(reporttest_range)]
Out[401]:
record startdate enddate
0 9931 2017-07-01 2018-06-30
1 28075 2018-08-01 2021-07-31
2 10042 2017-07-01 2018-06-30
3 28108 2017-07-01 2018-06-30
5 28111 2017-07-02 2018-09-30