gpt4 book ai didi

python - 如何使用 python pandas 有效地根据日期重叠范围对行进行子集化?

转载 作者:行者123 更新时间:2023-12-04 17:21:56 25 4
gpt4 key购买 nike

我的数据框有两个日期类型的列:开始和结束 (yyyy-mm-dd)。

这是我的数据框:

import pandas as pd
import datetime

data=[["2016-10-17","2017-03-08"],["2014-08-17","2016-09-08"],["2014-01-01","2015-01-01"],["2017-12-20","2019-01-01"]]

df=pd.DataFrame(data,columns=['start','end'])
df['start'] = pd.to_datetime(df['start'], format='%Y-%m-%d')
df['end'] = pd.to_datetime(df['end'], format='%Y-%m-%d')

start end
0 2016-10-17 2017-03-08
1 2014-08-17 2016-09-08
2 2014-01-01 2015-01-01
3 2017-12-20 2019-01-01

我有引用开始和结束日期如下。

ref_start=datetime.date(2015, 9, 20)
ref_end=datetime.date(2017,1,31)
print(ref_start,ref_end)
2015-09-20 2017-01-31

如果行的开始和结束日期范围与引用 开始和结束日期重叠,我想对行进行子集化。第三行和第四行未选中,因为开始和结束日期范围与引用日期范围(2015-09-20 ~ 2017-01-31)不重叠

所以我想要的结果是这样的:

        start         end
0 2016-10-17 2017-03-08
1 2014-08-17 2016-09-08

为此,我正在考虑基于此使用以下代码:Efficient date range overlap calculation in python?

df[(max(df['start'],ref_start)>min(df['end'],ref_end))]

但是,它不起作用。有什么方法可以高效地获得预期的结果吗?

最佳答案

我在职业生涯早期学到的一个技巧就是我所说的“跨越日期”:将一个范围的开始与另一个范围的结束进行比较。

# pd.Timestamp can do everything that datetime/date does and some more
ref_start = pd.Timestamp(2015, 9, 20)
ref_end = pd.Timestamp(2017,1,31)

# Compare the start of one range to the end of another and vice-versa
# Made into a separate variable for reability
cond = (ref_start <= df['end']) & (ref_end >= df['start'])
df[cond]

关于python - 如何使用 python pandas 有效地根据日期重叠范围对行进行子集化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65643401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com