如果我有以下格式的两个日期帧。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中所有ID的所有行,如果它们属于df中相同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匹配的ID,其中一个日期在cd2的日期范围内,范围从df-a。
很抱歉提了个冗长的问题。第一次发帖。
发布于 2020-08-19 20:28:19
我尽了最大的努力去理解你的问题,但是我对你的回答很困惑。
df中的任何ID都不应该删除。即使对于df-b的第3行,日期(2020-06-10)也不属于df-a中ID cd2的任何开始/结束日期范围。
我确实建立了一个与你提供的df类似的例子-一个存在:
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-24df-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是输出DataFrame。
运行此操作后,df_c应该如下所示:
ID Date
0 cd2 2020-05-12
1 cd2 2020-04-12
3 cd15 2020-04-28
4 cd193 2020-04-13https://stackoverflow.com/questions/63483800
复制相似问题