我正在比较2个pandas数据帧列,以尝试使用嵌套的for循环找到子字符串匹配项。有更有效的方法吗?
这是我的实际代码:
c = 0
for i, sisRow in sis.iterrows():
for e, sapRow in sap.iterrows():
codSis = sisRow['prod_Codigo']
codSap = sapRow['ItemCode']
if codSap.find(codSis) != -1:
sis.loc[i, 'desc_SAP'] = sapRow['ItemName']
sis.loc[i, 'prod_CodigoSap'] = sapRow['ItemCode']
sap.drop(sap.index[e])
c += 1
print(c, end=', ')
break
我使用print语句只是为了跟踪程序正在运行,而我并没有陷入无限循环。
答案 0 :(得分:0)
代替迭代行,您可以迭代序列映射并按列使用布尔索引。
visible: boolean;
constructor() {
this.visible = false;
}
toggleDropdown(): void {
TweenMax.to(dropdown, 1, {css: {height: '0px'}, ease: Power2.easeInOut, onComplete: this.toggleVisibility}
}
toggleVisibility() {
this.visible = !this.visible;
}
尚不清楚为什么要在迭代时(即sap_map = sapRow.set_index('ItemCode')['ItemName']
for k, v in sap_map.items():
mask = [codSis in k for codSis in sisRow['prod_Codigo'].values]
sis.loc[mask, 'desc_SAP'] = v
sis.loc[mask, 'prod_CodigoSap'] = k
)从迭代器中删除项目。不建议您这样做,目前尚不清楚该实现了什么。因此,我省略了此步骤。这确实意味着您可能希望订购映射系列,否则以后的映射将具有优先权。