如果我有两个以下格式的日期框架。 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中匹配且其日期在cd2的日期范围从df-a之内的ID。
很抱歉,这个冗长的问题。第一次发布。
答案 0 :(得分:1)
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是输出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