<p>考虑以下玩具示例:</p>
<pre><code>import numpy as np
import pandas as pd
bom2 = pd.DataFrame(
[
['A', 'F'],
['AF', 'F'],
['AF2', 'F'],
['A', 'AF2'],
['A', 'AF'],
['A2', 'AF'],
], columns=['ASS', 'FIN'])
print(bom2)
# ASS FIN
# 0 A F
# 1 AF F
# 2 AF2 F
# 3 A AF2
# 4 A AF
# 5 A2 AF
</code></pre>
<p>“模式”是:</p>
<ul>
<li><code>AF</code>和<code>AF2</code>指的是在ASS和FIN中的id。你知道吗</li>
<li><code>A</code>和<code>A2</code>只在ASS中</li>
<li><code>F</code>只在FIN中。你知道吗</li>
</ul>
<p>然后:</p>
<pre><code>ass = bom2['ASS'].tolist()
fin = bom2['FIN'].tolist()
# filter out rows of bom2 where FIN equals AF
nejsou = bom2[-bom2['FIN'].isin(ass)]
nee = list() #will contain ASS not in FIN
for a in ass:
if a not in fin: nee.append(a)
print(nejsou)
# ASS FIN
# 0 A F
# 1 AF F
# 2 AF2 F
</code></pre>
<p>收益率</p>
<pre><code>print "method(1 + 2):", len(set(nejsou.ASS.tolist()+nee)), "Unique ASS IDs"
# method(1 + 2): 4 Unique ASS IDs
print "method(1):",len(set(nejsou.ASS.tolist())), "Unique ASS IDs"
# method(1): 3 Unique ASS IDs
print "method(2):",len(set(nee)), "Unique ASS IDs"
# method(2): 2 Unique ASS IDs
</code></pre>
<p>注意</p>
<pre><code>print(set(nee))
# set(['A', 'A2'])
print(set(nejsou.ASS.tolist()))
# set(['A', 'AF2', 'AF'])
</code></pre>
<p>所以方法(1)和方法(2)产生不同的结果。
如果您遵循此模式,您可以在其中添加任意数量的项
设置。你知道吗</p>
<ul>
<li><p>要增加方法(1)而不增加方法(2),请添加更多行,如<code>AF</code></p>
<pre><code>['AFn', 'F'],
['A', 'AFn'],
</code></pre></li>
<li><p>要增加方法(2)而不增加方法(1),请添加更多行,如<code>A2</code></p>
<pre><code>['An', 'AF'],
</code></pre></li>
</ul>
<hr/>
<p>仅获取Finish product在
装配柱使用方法1:</p>
<pre><code>In [107]: bom2.loc[~bom2['FIN'].isin(bom2['ASS'])]
Out[107]:
ASS FIN
0 A F
1 AF F
2 AF2 F
</code></pre>
<p>不是方法2:</p>
<pre><code>In [109]: bom2[bom2['ASS'].isin(nee)]
Out[109]:
ASS FIN
0 A F
4 A AF < WRONG; AF is in bom2['ASS']
5 A2 AF < WRONG
</code></pre>