回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我想删除前一个文件中已经包含的所有行开始:结束范围。你知道吗</p>
<p>示例df:</p>
<pre><code> length qstart qend sstart send
0 5464 1 5459 1 5460
1 400 3619 4015 4654 4258
2 396 4261 4653 4012 3619
3 203 1210 1411 1086 1287
4 203 5486 5689 5490 5693
5 100 5500 5600 5310 5410
</code></pre>
<p>通过看Q开始:qend,我想删除范围内包含的所有行/下/此行Q开始:qend(1:5459),并将此行为应用于所有剩余行。你知道吗</p>
<p>我尝试过制作掩码,并将数据帧合并到一起,类似于<a href="https://stackoverflow.com/questions/39223638/pandas-delete-rows-based-on-other-rows">this post</a>,但我无法拼凑出有用的东西。我还看了方向偏移()解决方案,但这只能查看行之间的固定间隔,而且据我所知不是动态的。我可以通过循环来解决这个问题,并像python一样对待它,但这是一个缓慢的方法,我想要一些更简单的方法</p>
<p>因此,如上所述,这是工作,但是缓慢的,不能很好地扩展。它也只适用于qstart:qend对,而不是另一个sstart:发送对(尽管在这个例子中输出是相同的)。你知道吗</p>
<pre class="lang-py prettyprint-override"><code>df = pd.DataFrame({'length': {0: 5464, 1: 400, 2: 396, 3: 203, 4: 203, 5:100},
'qstart': {0: 1, 1: 3619, 2: 4261, 3: 1210, 4: 5486, 5:5500},
'qend': {0: 5459, 1: 4015, 2: 4653, 3: 1411, 4: 5689, 5:5600},
'sstart': {0: 1, 1: 4654, 2: 4012, 3: 1086, 4: 5490, 5:5310},
'send': {0: 5460, 1: 4258, 2: 3619, 3: 1287, 4: 5693, 5:5410}})
removeRows=[]
for i in range(len(df.index)-1):
for j in range(i,len(df.index)):
if df.iloc[j]['qstart']>df.iloc[i]['qstart']:
if df.iloc[j]['qend']<df.iloc[i]['qend']:
removeRows.append(j)
print(df[~df.index.isin(removeRows)])
</code></pre>
<pre><code> length qstart qend sstart send
0 5464 1 5459 1 5460
4 203 5486 5689 5490 5693
</code></pre>
<h3>预期</h3>
<p>输入(df按“长度”排序):</p>
<pre><code> length qstart qend sstart send
0 5464 1 5459 1 5460
1 400 3619 4015 4654 4258
2 396 4261 4653 4012 3619
3 203 1210 1411 1086 1287
4 203 5486 5689 5490 5693
5 100 5500 5600 5310 5410
</code></pre>
<p>输出:</p>
<pre><code> length qstart qend sstart send
0 5464 1 5459 1 5460
4 203 5486 5689 5490 5693
</code></pre>