回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有一个如下结构的数据框架:</p>
<pre><code>df = pd.DataFrame({'ID':['A001', 'A001', 'A001', 'A002', 'A002', 'A003', 'A003', 'A004', 'A004', 'A004', 'A005', 'A005'],
'Val1':[2, 2, 2, 5, 6, 8, 8, 3, 3, 3, 7, 7],
'Val2':[100, -100, 50, -40, 40, 60, -50, 10, -10, 10, 15, 15]})
</code></pre>
<pre><code> ID Val1 Val2
0 A001 2 100
1 A001 2 -100
2 A001 2 50
3 A002 5 -40
4 A002 6 40
5 A003 8 60
6 A003 8 -50
7 A004 3 10
8 A004 3 -10
9 A004 3 10
10 A005 7 15
11 A005 7 15
</code></pre>
<p>我想删除重复的行,其中ID和Val1是重复的,Val2在两行中的总和为零。正/负Val2行也可能不是连续的,即使在<code>groupby</code>下也是如此</p>
<p>在上面的示例数据中,行0和1以及7、8、9满足这些标准。我想删除[0,1],并删除[7,8]或[8,9]</p>
<p>这里的另一个限制是可能存在完全重复的行([10,11])。在本例中,我希望保留两行</p>
<p>因此,期望输出为:</p>
<pre><code> ID Val1 Val2
2 A001 2 50
3 A002 5 -40
4 A002 6 40
5 A003 8 60
6 A003 8 -50
9 A004 3 10
10 A005 7 15
11 A005 7 15
</code></pre>
<p>除了迭代每一行并寻找符合条件的其他行之外,我没有更“pythonic”的方法来实现这一点。非常感谢您的帮助</p>