我在熊猫中有两个DataFrame:
import pandas as pd
df1 = pd.DataFrame({'Name': ["A","B","C","D","E"],'start': [50,124,1,159,12,26,110],'stop': [60,200,19,24,30,160]})
df2 = pd.DataFrame({'Name': ["B",'start': [126,143,159],'stop': [129,220,27,200]})
print(df1)
Name start stop
0 A 50 60
1 B 124 200
2 C 1 19
3 C 159 200
4 D 12 24
5 D 26 30
6 E 110 160
print(df2)
Name start stop
0 B 126 129
1 C 143 220
2 D 19 27
3 E 159 200
我要使用以下条件过滤df1以删除基于df2的行:
- 名称应同时出现在df1和df2中
- 在另一个DataFrame中,该名称从开始到终止的范围与该名称从开始到终止的范围重叠
这将给出:
Name start stop
0 B 124 200
1 C 159 200
2 D 12 24
3 D 26 30
4 E 110 160
位置:
- 由于df2中没有A,因此A已被删除
- B保持不变,因为df2中B的起始和终止与df1中B的起始和终止嵌套
- 由于df1的一个C与df2不重叠,因此删除了一个C,而保留了另一个,因为它嵌套在df2中C的起始和终止范围内
- 两个D都被保留,因为它们都与df2中的D的范围重叠
- E被保留,因为其范围与df2中的E重叠
任何帮助将不胜感激!