1
resposta

Criando nova coluna com base em condições encontradas em outro DF

Olá,

Tenho um DataFrame com duas colunas, PRODUTO e PESO:

PRODUTOPESO
TVNUMERO10.520
TVNUMERO21.430
TVNUMERO30.950

Quero adicionar novas colunas (CUSTO DE FRETE) para visualizar esse custo para cada produto dependendo do Estado do Brasil de destino. Esse custo de frete é calculado com base no peso do produto.

Os custos de frete estão em outro DataFrame da seguinte forma:

PESO INICIALPESO FINALVALOR DE FRETE SÃO PAULOVALOR DE FRETE PARANÁVALOR DE FRETE SANTA CATARINA
0.0010.5005.008.009.00
0.5011.00010.0012.0013.00
1.0012.00015.0018.0019.00

Mas não faço ideia de como fazer criar essas nova colunas no primeiro DataFrame, buscando as informações que tem essa condição de PESO INICIAL e PESO FINAL. Qual a melhor forma para criar essas novas colunas?

1 resposta

Qual a melhor forma para criar essas novas colunas?

Eu não sei qual a melhor forma, pois sou novo nesse mundo de pandas.

Encontrei uma forma de fazer isso:

from pandas import DataFrame

produto_peso = {
  'PRODUTO': ['TVNUMERO1', 'TVNUMERO2', 'TVNUMERO3'],
  'PESO': [0.520, 1.430, 0.950]
}

df_produto_peso = DataFrame(produto_peso)


peso_frete_estado = {
  'PESO_INICIAL': [0.001, 0.501, 1.001],
  'PESO_FINAL': [0.500, 1.000, 2.000],
  'VALOR_DE_FRETE_SAO_PAULO': [5.00, 10.00, 15.00],
  'VALOR_DE_FRETE_PARANÁ': [8.00, 12.00, 18.00],
  'VALOR_DE_FRETE_SANTA_CATARINA': [9.00, 13.00, 19.00]
}

df_peso_frete_estado = DataFrame(peso_frete_estado)


# Criação das colunas em df_produto_peso
df_produto_peso['CUSTO_DE_FRETE_SAO_PAULO'] = 'NaN'
df_produto_peso['CUSTO_DE_FRETE_PARANÁ'] = 'NaN'
df_produto_peso['CUSTO_DE_FRETE_SANTA_CATARINA'] = 'NaN'


for indice, peso in enumerate(df_produto_peso['PESO']):
    # seleciona a primeira linha de df_peso_frete_estado, em que o peso é menor ou igual ao peso_final
    serie_frete = df_peso_frete_estado.loc[(peso <= df_peso_frete_estado['PESO_FINAL'])].iloc[0]
    # preenche a linha com os valores de frete por estado
    df_produto_peso.loc[indice,'CUSTO_DE_FRETE_SAO_PAULO'] =  serie_frete['VALOR_DE_FRETE_SAO_PAULO']
    df_produto_peso.loc[indice,'CUSTO_DE_FRETE_PARANÁ'] =  serie_frete['VALOR_DE_FRETE_PARANÁ']
    df_produto_peso.loc[indice,'CUSTO_DE_FRETE_SANTA_CATARINA'] =  serie_frete['VALOR_DE_FRETE_SANTA_CATARINA']

print(df_produto_peso)

Saída:

     PRODUTO  PESO CUSTO_DE_FRETE_SAO_PAULO CUSTO_DE_FRETE_PARANÁ CUSTO_DE_FRETE_SANTA_CATARINA
0  TVNUMERO1  0.52                     10.0                  12.0                          13.0
1  TVNUMERO2  1.43                     15.0                  18.0                          19.0
2  TVNUMERO3  0.95                     10.0                  12.0                          13.0