日期之间的任何差异超过阈值

我有一个熊猫数据框列,其中每一行都包含一个日期列表。我想创建一个标志来标识列表中的任何日期是否与“任何”其他日期相隔 7 天

例如

list = ['2019-10-22','2019-10-24','2019-10-29']

这应该导致错误,因为最后一个(元素)日期与其他日期中的至少一个相隔超过 7 天

这种情况在数据框的每一行中重复出现

谢谢


慕姐8265434
浏览 98回答 2
2回答

森栏

一种方法是使用explode、转换为datetime和聚合使用np.ptp。我创建了一个小型测试 DF 来运行它。import pandas as pdimport numpy as npdf = pd.DataFrame({'something': [1,2],&nbsp; &nbsp; 'dates':[['2019-10-22','2019-10-24','2019-10-29'], ['2019-10-21','2019-10-12','2019-10-19']]})df['sevendays'] = df.dates.explode().astype('datetime64[ns]').groupby(level=0).agg(np.ptp).dt.days <= 7print(df)&nbsp; &nbsp;something&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;dates&nbsp; sevendays0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1&nbsp; [2019-10-22, 2019-10-24, 2019-10-29]&nbsp; &nbsp; &nbsp; &nbsp;True1&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2&nbsp; [2019-10-21, 2019-10-12, 2019-10-19]&nbsp; &nbsp; &nbsp; False在您的问题中,您提到 7 天和超过 7 天都是截止点。目前会False超过7天,您可以根据需要调整解决方案。

慕慕森

这是另一个使用函数然后apply使用表达式的选项lambda。逻辑与@ScootCork 在他的回答( )中使用的逻辑基本相同np.ptp,只是列表没有展开。这在性能方面应该稍微好一些。import numpy as npimport pandas as pddef check_in_range(dates, maxdelta):&nbsp; &nbsp; dti = pd.to_datetime(dates)&nbsp; &nbsp; return np.absolute(np.ptp(dti.values).astype(np.float) / 1e9) <= maxdeltadf = pd.DataFrame({'dates':[['2019-10-22','2019-10-24','2019-10-29', '2019-10-21'],&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ['2019-10-23','2019-10-20','2019-10-12'],&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ['2019-10-22','2019-10-24','2019-10-29']]})df['inrange'] = df['dates'].apply(lambda r: check_in_range(r, 86400*7))# df['inrange']# 0&nbsp; &nbsp; False# 1&nbsp; &nbsp; False# 2&nbsp; &nbsp; &nbsp;True
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python