簡體   English   中英

比較兩個數據框並根據多個條件刪除行

[英]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。

抱歉這個冗長的問題。 第一次發帖。


我盡力理解您的問題,但我對您的示例答案感到困惑。
不應刪除 df-b 中的任何 ID。 即使對於 df-b 的第 3 行,日期 (2020-06-10) 也不在 df-a 中 ID cd2 的任何開始/結束日期范圍內。

我確實設置了一個與您提供的 df-a 類似的示例:
 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.

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