回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p><strong>输入</strong></p>
<p>我有一个包含多个列的数据框架。和列表</p>
<pre><code>proof_path =
#1 X Y #2 Z #3 W #4
0 p1 a b p2 c p2 a p3
1 p1 a b p2 c p3 a p1
2 p1 a b p2 d p3 e p4
rule = [('#1', 'X', 'Y'), ('#2', 'X', 'Z'), ('#3', 'W', 'Z'), ('#4', 'W', 'Y')]
</code></pre>
<p>在上面的数据框中,我想检查每一行是否在<code>(#1, X, Y)</code>、<code>(#2, X, Z)</code>、<code>(#3, W, Z)</code>和<code>(#4, W, Y)</code>之间重复</p>
<p>例如,在对应于索引0的行中,<code>(#2, X, Z)</code>和<code>(#3, W, Z)</code>重叠<code>(P2, a, c)</code></p>
<p>此外,与索引1对应的行中的<code>(#1, X, Y)</code>和<code>(#4, W, Y)</code>重叠<code>(P1, a, b)</code>。
我将从该数据帧中删除这些多值之间重叠的行</p>
<p>我期望的输出是</p>
<p><strong>输出</strong></p>
<pre><code>proof_path =
#1 X Y #2 Z #3 W #4
2 p1 a b p2 d p3 e p4
</code></pre>
<p>我尝试了以下方法</p>
<pre><code>for depth in range(len(rule)-1):
for i in range(1, len(rule)-depth):
current_rComp = proof_path[[rule[depth][0], rule[depth][1], rule[depth][2]]]
current_rComp.columns = ['pred', 'subj', 'obj']
next_rComp = proof_path[[rule[i+depth][0], rule[i+depth][1], rule[i+depth][2]]]
next_rComp.columns = ['pred', 'subj', 'obj']
proof_path = proof_path[current_rComp.ne(next_rComp).any(axis=1)]
</code></pre>
<p>尽管这些方法能够达到预期的结果,但它们通过为每次迭代生成新的数据帧而效率低下。有没有简单的方法来完成这些任务</p>