【发布时间】:2018-03-15 08:32:52
【问题描述】:
我在 Python 中有一个 pandas DataFrame,其中两列分别表示开始日期和结束日期。 我想:
- 假设两个熊猫系列作为开始作为结束日期作为输入...
- 确定,对于每对开始-结束日期,间隔 [开始,结束)(即包括开始但不包括结束)之间的任何日期是星期五还是星期六...
- 将 pandas Series 输出为布尔值。
- 解决方案应该相对较快,因为我正在处理超过 2M 行。
数据集如下所示:
start end
2013-08-02 2013-08-04
2014-11-24 2014-11-28
2013-10-29 2013-10-31
2013-12-06 2013-12-10
2014-08-15 2014-08-17
我会期待这样的:
has_weekend
TRUE
FALSE
FALSE
TRUE
TRUE
对于具有接近 2M 行的 DataFrame,我目前的方法非常慢。 代码如下:
df.apply(lambda x: np.any(np.in1d([d.weekday() for d in pd.date_range(x.start, x.end)],[4,5])), axis=1)
有什么想法吗?
解决方案 最快的解决方案是来自@Anton VBr 的修改答案
s = df.start.dt.dayofweek
e = df.end.dt.dayofweek
dt = (df.end- df.start).dt.days
has_weekend = ( ((s >= 4) & (s != 6)) | ( e>=5) | ((e < s) & (s != 6)) | (dt >= 6) )
【问题讨论】:
-
您的问题中缺少数据没有帮助。
-
@cᴏʟᴅsᴘᴇᴇᴅ 为了更清晰,我添加了数据的 sn-p。
-
对于这个输入,预期是什么?
0, 1, 3, 4? -
再检查一下,应该是 T T F T T,你现在的解决方案是一样的。
-
@cᴏʟᴅsᴘᴇᴇᴅ 你是对的,它应该给 T T F T T。我忘了排除结束日期。尽管如此,我的实际解决方案是放慢速度。我会尽快试试你的。
标签: python pandas datetime dataframe intervals