为什么这个If / Elif循环这么慢?

时间:2017-02-07 22:52:17

标签: python-3.x if-statement

谁能告诉我为什么这段代码太慢了?有什么办法可以加快速度吗? 基本上,我按照伪代码制作了Pandas数据帧(网络):

  1. 制作空数据框(networkx网络)
  2. 定义我感兴趣的对象列表(ChampionsA列表 和ChampionsB)列表。这些是节点。
  3. 对于championsA和championsB的所有组合,请执行以下操作:
  4. 计算你在一起看到冠军A和冠军B的次数 那个顺序(AB)。这是A和B之间的有向边。
  5. 计算你看到冠军B和冠军A的次数 那个订单(BA)。这是B和A之间的指向边缘。
  6. 通过执行以下操作为这些有向边指定权重:
  7. 如果存在有向边A-> B和B-> A,则应用以下内容 公式为边权重。
  8. 如果A-> B存在且B-> A不然,则为其分配另一个公式 边缘重量。
  9. 如果B-> A存在且A-> B不存在,则为其分配另一个公式 边缘重量。
  10. 将这些权重放入数据框网络。
  11. 代码:

        network = pd.DataFrame(columns=['Champion A','Champion B', 'Weight'])
        championsA = listA
        championsB = listB
    
        for champb in championsB:
            for champa in championsA:
    
               AB = tally.loc[tally['Champion B'] == champb].loc[tally['Champion A'] == champa]
               BA = tally.loc[tally['Champion A'] == champb].loc[tally['Champion B'] == champa]
    
                    if len(AB) == 1 and len(BA) == 1:
                        wA = AB['Weight'].iloc[0]
                        wB = BA['Weight'].iloc[0]
                        AB['Weight'] = somenumber
                        BA['Weight'] = somenumber
                    elif len(AB) == 1 and len(BA) == 0: 
                        AB['Weight'] = someothernumber
                    elif len(AB) == 0 and len(BA) == 1: 
                        BA['Weight'] = someothernumber
                    network = pd.concat([network,AB])
                    network = pd.concat([network,BA])
    

0 个答案:

没有答案