【发布时间】:2019-07-24 22:18:05
【问题描述】:
我有一个表格(程序的简化输出),我需要对其进行过滤:
id hit from to value
A hit1 56 102 0.00085
B hit2 89 275 0.00034
B hit3 240 349 0.00034
C hit4 332 480 3.40E-15
D hit5 291 512 3.80E-24
D hit6 287 313 0.00098
D hit7 381 426 0.00098
D hit8 287 316 0.0029
D hit9 373 422 0.0029
D hit10 514 600 0.0021
对于每个 id,df 应按 from 排序,如果有重叠的命中,则保留 value 较低的那个。
到目前为止,这是我的代码,它首先由from 开始,然后由value 开始:
import pandas
df = pandas.read_csv("table", sep='\s+', names=["id", "hit", "from", "to", "value"])
df.sort_values(['from', "value"]).groupby('id')
但是我如何检查重叠(from 到 to)并删除具有更高分数的重叠?
这是我的预期输出:
id hit from to valu
A hit1 56 102 0.00085
C hit4 332 480 3.40E-15
D hit5 291 512 3.80E-24
D hit10 514 600 0.0021
请注意,id B 有两个相同值的重叠命中,因此两个条目都将被踢出。
【问题讨论】:
-
你能在测试数据中放一些重叠的值吗?
-
你能解释一下重叠吗?
-
很抱歉,如果不清楚。将
from和to视为坐标。因此A没有任何重叠命中,因为它是唯一的命中,而B在坐标 240 到 275 中有重叠。D有 5 个重叠命中,其中 1 个必须根据最低选择value,但最后一个hit10与D的其他部分没有重叠。 -
似乎在你的逻辑下,id 'D', hit 'hit5' 应该被删除,但你在你的例子中有它。我读对你的逻辑了吗?
-
应该保留LOWER值的命中
标签: python pandas sorting filtering