Python-替代迭代解决方案

时间:2020-01-29 19:59:44

标签: python pandas dataframe

我已经编写了以下代码来创建数据框,并根据特定条件添加新的行和列。不幸的是,这需要很多时间才能执行。

是否有其他替代方法? 任何输入都将受到高度赞赏。

dfCircuito=None
for index, row in dadosCircuito.iterrows():
    for mes in range(1,13):
        for nue in range(1,5):
            for origem in range (1,3):
                for suprimento in range (1,3):
                    for tipo in range (1,3):

                        df=pd.DataFrame(dadosCircuito.iloc[[index]])
                        df['MES']=mes
                        if(nue==1):
                            df['NUE']='N'
                        elif(nue==2):
                            df['NUE']='C'
                        elif(nue==3):
                            df['NUE']='F'
                        else:
                            df['NUE']='D'

                        if(origem==1):
                            df['Origem']='DISTRIBUICAO'
                        else:
                            df['Origem']='SUBTRANSMISSAO'


                        if(suprimento==1):
                            df['Suprimento']='INTERNO'
                        else:
                            df['Suprimento']='EXTERNO'

                        if(tipo==1):
                            df['TipoOcorrencia']='EMERGENCIAL'
                        else:
                            df['TipoOcorrencia']='PROGRAMADA'


            dfCircuito=pd.concat([dfCircuito, df], axis=0) ```

1 个答案:

答案 0 :(得分:1)

如果我对您的理解正确,则您正在尝试为每行dadosCircuito添加许多行。多余的行是mes=1...12; nue=N,C,F,D; ...

的排列

您可以创建一个包含属性排列的数据框,然后将其重新连接到dadosCircuito

mes = range(1,13)
nues = list('NCFD')
origems = ['DISTRIBUICAO', 'SUBTRANSMISSAO']
suprimentos = ['INTERNO', 'EXTERNO']
tipos = ['EMERGENCIAL', 'PROGRAMADA']

# Make sure dadosCircuito.index is unique. If not, call a reset_index
# dadosCircuito = dadosCircuito.reset_index()
df = pd.MultiIndex.from_product([dadosCircuito.index, mes, nues, origems, suprimentos, tipos], names=['index', 'MES', 'NUE', 'Origem', 'Suprimento', 'TipoOcorrencia']) \
        .to_frame(index=False) \
        .set_index('index')

dfCircuito = dadosCircuito.join(df)