2 回答

TA貢獻1810條經驗 獲得超5個贊
一種方法是使用explode
、轉換為datetime
和聚合使用np.ptp
。我創建了一個小型測試 DF 來運行它。
import pandas as pd
import numpy as np
df = pd.DataFrame({'something': [1,2],
'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 <= 7
print(df)
something dates sevendays
0 1 [2019-10-22, 2019-10-24, 2019-10-29] True
1 2 [2019-10-21, 2019-10-12, 2019-10-19] False
在您的問題中,您提到 7 天和超過 7 天都是截止點。目前會False超過7天,您可以根據需要調整解決方案。

TA貢獻1856條經驗 獲得超17個贊
這是另一個使用函數然后apply
使用表達式的選項lambda
。邏輯與@ScootCork 在他的回答( )中使用的邏輯基本相同np.ptp
,只是列表沒有展開。這在性能方面應該稍微好一些。
import numpy as np
import pandas as pd
def check_in_range(dates, maxdelta):
dti = pd.to_datetime(dates)
return np.absolute(np.ptp(dti.values).astype(np.float) / 1e9) <= maxdelta
df = pd.DataFrame({'dates':[['2019-10-22','2019-10-24','2019-10-29', '2019-10-21'],
['2019-10-23','2019-10-20','2019-10-12'],
['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 False
# 1 False
# 2 True
添加回答
舉報