[英]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
:
如果 dataframe 中的日期是 date_list[1] = '2021-11-20' 的前三個連續日期(即 2021 年 11 月 19 日、2021 年 11 月 18 日、2021 年 11 月 17 日)。
如果 window 3 天中有連續的日期,則檢查這些連續的日期是否每天至少有 2 個周期,即兩行日期相同但周期不同。
如果是這樣,則計算行的長度並作為列添加到表中。 所以在這個 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.