簡體   English   中英

如何檢查 dataframe 是否包含每組給定日期列表中的 3 個先前連續日期(python)

[英]How to check if the dataframe contains 3 previous consecutive dates from a list of dates given per group (python)

假設我們有一個帶有 ID 和日期的示例 dataframe。 我們還有一個 date_list = ['2021-12-16', 2021-11-20'] (yyyy-mm-dd)

sample_df: id(str) = unique id dates(datetime) period(str) = 24h分為4個6h周期。 因此,時段 2 指的是早上 6 點至中午 12 點之間的時間。

ID 日期 時期
啊啊啊 2021-11-16 2
啊啊啊 2021-12-16 1
啊啊啊 2022-09-05 2
bbbb 2021-11-20 1
bbbb 2022-01-22 3
bbbb 2021-09-12 1
bbbb 2022-03-23 3
bbbb 2021-11-21 2
bbbb 2021-11-21 1

對於組 ID,我想檢查bbbb

  1. 如果 dataframe 中的日期是 date_list[1] = '2021-11-20' 的前三個連續日期(即 2021 年 11 月 19 日、2021 年 11 月 18 日、2021 年 11 月 17 日)。

  2. 如果 window 3 天中有連續的日期,則檢查這些連續的日期是否每天至少有 2 個周期,即兩行日期相同但周期不同。

  3. 如果是這樣,則計算行的長度並作為列添加到表中。 所以在這個 bbbb 的例子中,應該有兩行在給定日期的 3 天期間內,並且有 2 個期間。

同樣,對於aaaa ID,我們需要檢查 1) 日期是否是來自 date_list[0] = '2021-12-16' 的前 3 個連續日期。 重復與上述相同的步驟。

任何幫助表示贊賞!

d = {'id': ['aaaa', 'aaaa', 'aaaa', 'bbbb', 'bbbb', 'bbbb', 'bbbb', 'bbbb', 'bbbb'],
        'dates': ['2021-11-16', '2021-12-16', '2022-09-05', 
                  '2021-11-20', '2022-01-22', '2021-09-12',
                 '2022-03-23', '2021-11-21', '2021-11-21'],
       'period': ['2', '1', '2',
                 '1', '3', '1', 
                 '3', '2', '1']}
sample_df = pd.DataFrame(d)
sample_df
df.dates = pd.to_datetime(df.dates)

df.loc[df.id.eq('aaaa'), 'match'] = date_list[0]
df.loc[df.id.eq('bbbb'), 'match'] = date_list[1]
df.match = pd.to_datetime(df.match)

mask = (df.dates.sub(df.match).abs().between('1d', '3d') &
        df.groupby(['id', 'dates'])['period'].transform('count').ge(2))

print(df[mask])

# Output - Rows that match your conditions:

     id      dates period      match
7  bbbb 2021-11-21      2 2021-11-20
8  bbbb 2021-11-21      1 2021-11-20

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM