[英]Compare two data-frames and removes rows based on multiple conditions
如果我有兩個以下格式的日期框。 df-a:
ID Start_Date End_Date
1 cd2 2020-06-01 2020-06-09
2 cd2 2020-06-24 2020-07-21
3 cd56 2020-06-10 2020-07-03
4 cd915 2020-04-28 2020-07-21
5 cd103 2020-04-13 2020-04-24
和 df-b:
ID Date
1 cd2 2020-05-12
2 cd2 2020-04-12
3 cd2 2020-06-29
4 cd15 2020-04-28
5 cd193 2020-04-13
我需要丟棄 df-b 中所有 ID 的所有行,它們落在 df-a 中相同 ID 的不同日期范圍內。 即回答
ID Date
1 cd2 2020-05-12
2 cd2 2020-04-12
4 cd15 2020-04-28
5 cd193 2020-04-13
因為 ID cd2 是唯一在 df-a 中與 df-a 中 cd2 的日期范圍內的日期相匹配的 ID。
抱歉這個冗長的問題。 第一次發帖。
ID Start_Date End_Date 0 cd2 2020-06-01 2020-06-11 1 cd2 2020-06-24 2020-07-21 2 cd56 2020-06-10 2020-07-03 3 cd915 2020-04-28 2020-07-21 4 cd103 2020-04-13 2020-04-24
df-b 是:
ID Date 0 cd2 2020-05-12 1 cd2 2020-04-12 2 cd2 2020-06-10 3 cd15 2020-04-28 4 cd193 2020-04-13
在這個例子中,df-b 的第 2 行(從 0 開始)應該被刪除,因為 2020-06-10 在 df-a 的第 0 行中介於 2020-06-01 和 2020-06-11 之間。
這是我執行行刪除的代碼
df_c = df_b.copy() for i in range(df_c.shape[0]): currentID = df_c.ID[i] currentDate = df_c.Date[i] df_a_entriesForCurrentID = df_a.loc[df_a.ID == currentID] for j in range(df_a_entriesForCurrentID.shape[0]): startDate = df_a_entriesForCurrentID.iloc[j,:].Start_Date endDate = df_a_entriesForCurrentID.iloc[j,:].End_Date if (startDate <= currentDate <= endDate): df_c = df_c.drop(i) print('dropped')
其中 df_c 是 output DataFrame。
運行此命令后,df_c 應如下所示:
ID Date 0 cd2 2020-05-12 1 cd2 2020-04-12 3 cd15 2020-04-28 4 cd193 2020-04-13
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.