【发布时间】:2019-11-07 03:10:20
【问题描述】:
我在 pandas 中有两个 DataFrame:
import pandas as pd
df1 = pd.DataFrame({'Name': ["A", "B", "C", "C","D","D","E"],
'start': [50, 124, 1, 159, 12, 26,110],
'stop': [60, 200, 19, 200, 24, 30,160]})
df2 = pd.DataFrame({'Name': ["B", "C","D","E"],
'start': [126, 143, 19, 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
地点:
- A 已被删除,因为 df2 中没有 A
- B 被保留,因为 df2 中 B 的起点和终点嵌套在 df1 中 B 的起点和终点中
- df1 的一个 C 已被删除,因为它的值没有与 df2 重叠,而另一个被保留,因为它嵌套在 df2 中 C 的开始和停止范围内
- 保留两个 D,因为它们都与 df2 中的 D 范围重叠
- E 被保留,因为它的范围与 df2 中的 E 重叠
任何帮助将不胜感激!
【问题讨论】: