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