<p>这可能不是解决这个问题的最有效方法,但它给出了正确的结果。你知道吗</p>
<p>让<code>df</code>作为初始数据帧:</p>
<pre><code>unique_chunks = []
for _, chunk in df.groupby((df['tileID'].diff() != 1).cumsum()):
unindexed_chunk = chunk.reset_index(drop=True)
for unique_chunk in unique_chunks:
unindexed_unique_chunk = unique_chunk.reset_index(drop=True)
if unindexed_chunk.equals(unindexed_unique_chunk):
break
else:
unique_chunks.append(chunk)
output_df = pd.concat(unique_chunks)
</code></pre>
<p>将提供:</p>
<pre><code> tileID x y h w
0 0 0 0.0 1 8.0
1 1 0 8.0 1 8.0
2 0 0 8.0 1 8.0
3 1 0 0.0 1 4.0
4 2 0 4.0 1 4.0
5 0 0 0.0 1 4.0
6 1 0 4.0 1 4.0
7 2 0 8.0 1 4.0
8 3 0 12.0 1 4.0
9 0 0 4.0 1 4.0
10 1 0 8.0 1 4.0
11 2 0 12.0 1 4.0
12 3 0 0.0 1 2.0
13 4 0 2.0 1 2.0
14 0 0 8.0 1 4.0
15 1 0 12.0 1 4.0
16 2 0 0.0 1 2.0
17 3 0 2.0 1 2.0
18 4 0 4.0 1 2.0
19 5 0 6.0 1 2.0
20 0 0 12.0 1 4.0
21 1 0 0.0 1 2.0
22 2 0 2.0 1 2.0
23 3 0 4.0 1 2.0
24 4 0 6.0 1 2.0
</code></pre>
<p>这里的想法是迭代初始数据帧的块,将它们收集到一个列表中,并检查当前迭代中的块是否已经存在于该列表中。别忘了重新设置索引!你知道吗</p>
<p>有关如何迭代块的解释,请参见<a href="https://stackoverflow.com/a/40204632/7851470">this answer</a>。你知道吗</p>
<hr/>
<p><strong>编辑:</strong><br/>
对于~20Gb的巨大输入文件,您可以尝试将处理过的唯一块保存到一个文件中,而不是将它们保存在一个列表中,然后按块读取它们,方法与处理输入文件相同。你知道吗</p>