我有一个名为bom2的表(约74k行+其他列),但我们只对组装和成品感兴趣。为了更清楚一点,两列中可以显示相同的装配和成品ID。你知道吗
bom2=pd.DataFrame({'Assembly': {0: '0138104116',
1: '0309005994',
2: '0309005996',
3: '0309005998',
4: '0309005998',
5: '0309005998',
6: '0309005998',
7: '0312005996',
8: '0312005997',
9: '0312005998'},
'Finish product': {0: '0138104116',
1: '0309005994',
2: '0309005996',
3: '0309005998',
4: '0309005998',
5: '0309005998',
6: '0309005998',
7: '0312005996',
8: '0312005997',
9: '0312005998'}})
我需要:
获取所有程序集ID
与成品ID比较
只取Finish product在Assembly列中没有其ID的行。你知道吗
方法1:
nejsou = bom2[-bom2['Finish product'].isin(bom2.Assembly.tolist())]
方法2:
ass = bom2.Assembly.tolist()
fin = bom2['Finish product'].tolist()
nee=list() #will contain Assembly IDs which do not occur in 'Finish product'
for a in ass:
if a not in fin: nee.append(a)
在下一步中,使用“nee”中的id按
bom2[bom2.Assembly.isin(nee)]
我原以为这两个方法是等价的,但是当我检查每个方法产生的程序集ID的数量时,我得到了不同的数字。你知道吗
print "method(1 + 2):", len(set(nejsou.Assembly.tolist()+nee)), "Unique Assembly IDs"
print "method(1):",len(set(nejsou.Assembly.tolist())), "Unique Assembly IDs"
print "method(2):",len(set(nee)), "Unique Assembly IDs"
method(1 + 2): 4021 Unique Assembly IDs
method(1): 4015 Unique Assembly IDs
method(2): 1986 Unique Assembly IDs
似乎方法1(布尔过滤)捕获了方法2捕获的所有案例+大约2k个其他案例,而我不知道这些案例是什么。你知道吗
这两种方法有何不同? 有没有其他方法可以达到预期的效果?你知道吗
考虑以下玩具示例:
“模式”是:
AF
和AF2
指的是在ASS和FIN中的id。你知道吗A
和A2
只在ASS中F
只在FIN中。你知道吗然后:
收益率
注意
所以方法(1)和方法(2)产生不同的结果。 如果您遵循此模式,您可以在其中添加任意数量的项 设置。你知道吗
要增加方法(1)而不增加方法(2),请添加更多行,如
AF
要增加方法(2)而不增加方法(1),请添加更多行,如
A2
仅获取Finish product在 装配柱使用方法1:
不是方法2:
这与方法1和方法2无关,因此与编程技术无关,而与逻辑有关。此外,我有一个想法,你会得到同样的结果,如果你使用布尔索引/过滤在第二种方法,反之亦然。 这是因为,如果我们将too列表与每个列表中的一些唯一值合并,那么在set()函数之后,每个列表中将有相同的值,这些值将变成一个值而不是两个值。你知道吗
考虑以下示例:
输出:
很高兴能帮上忙!如果你觉得我的回答对你有用,请随时接受。:-)
相关问题 更多 >
编程相关推荐