使用嵌套的for循环比较不同的Pandas数据帧

时间:2018-10-11 12:22:08

标签: python pandas

我正在比较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语句只是为了跟踪程序正在运行,而我并没有陷入无限循环。

1 个答案:

答案 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 )从迭代器中删除项目。不建议您这样做,目前尚不清楚该实现了什么。因此,我省略了此步骤。这确实意味着您可能希望订购映射系列,否则以后的映射将具有优先权。