亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

日期之間的任何差異超過閾值

日期之間的任何差異超過閾值

慕姐8265434 2023-03-08 15:24:28
我有一個熊貓數據框列,其中每一行都包含一個日期列表。我想創建一個標志來標識列表中的任何日期是否與“任何”其他日期相隔 7 天例如list = ['2019-10-22','2019-10-24','2019-10-29']這應該導致錯誤,因為最后一個(元素)日期與其他日期中的至少一個相隔超過 7 天這種情況在數據框的每一行中重復出現謝謝
查看完整描述

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天,您可以根據需要調整解決方案。


查看完整回答
反對 回復 2023-03-08
?
慕慕森

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


查看完整回答
反對 回復 2023-03-08
  • 2 回答
  • 0 關注
  • 131 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號