Pandas é uma poderosa biblioteca Python para manipulação e análise de dados. Criar novas colunas em um DataFrame com base em condições é uma tarefa comum. Este artigo explora vários métodos eficientes para alcançar isso, priorizando clareza e desempenho. Abordaremos list comprehensions, métodos NumPy, pandas.DataFrame.apply
e pandas.Series.map()
, comparando seus pontos fortes e fracos.
Sumário
- List Comprehensions para Criação Condicional de Colunas
- Aproveitando o NumPy para Lógica Condicional Otimizada
- Usando
pandas.DataFrame.apply()
para Lógica Condicional Flexível - Mapeamento Eficiente de Valores com
pandas.Series.map()
- Comparação de Desempenho e Recomendações
List Comprehensions para Criação Condicional de Colunas
List comprehensions fornecem uma sintaxe concisa para criar novas colunas com base em condições simples. São particularmente eficientes para DataFrames menores. No entanto, seu desempenho pode degradar com conjuntos de dados maiores.
import pandas as pd
data = {'Sales': [100, 200, 150, 250, 300],
'Region': ['North', 'South', 'North', 'East', 'West']}
df = pd.DataFrame(data)
df['SalesCategory'] = ['High' if sales > 200 else 'Low' for sales in df['Sales']]
print(df)
Aproveitando o NumPy para Lógica Condicional Otimizada
NumPy oferece operações vetorizadas altamente otimizadas, melhorando significativamente o desempenho, especialmente para DataFrames maiores. np.where()
é particularmente útil para atribuições condicionais.
import numpy as np
df['SalesCategory_np'] = np.where(df['Sales'] > 200, 'High', 'Low')
print(df)
Usando pandas.DataFrame.apply()
para Lógica Condicional Flexível
O método apply()
oferece flexibilidade para lógica condicional mais complexa, aplicando funções linha a linha (axis=1
) ou coluna a coluna (axis=0
). No entanto, pode ser mais lento que NumPy para DataFrames muito grandes, especialmente com funções computacionalmente intensivas.
def categorize_sales(row):
if row['Region'] == 'North' and row['Sales'] > 150:
return 'High North'
elif row['Sales'] > 200:
return 'High'
else:
return 'Low'
df['SalesCategory_apply'] = df.apply(categorize_sales, axis=1)
print(df)
Mapeamento Eficiente de Valores com pandas.Series.map()
O método map()
é ideal para aplicar mapeamentos de um conjunto de valores para outro, criando colunas categóricas de forma eficiente.
region_mapping = {'North': 'Northern Region', 'South': 'Southern Region', 'East': 'Eastern Region', 'West': 'Western Region'}
df['RegionMapped'] = df['Region'].map(region_mapping)
print(df)
Comparação de Desempenho e Recomendações
O método ideal depende de fatores como a complexidade da condição, o tamanho do DataFrame e os requisitos de desempenho. Para condições simples e conjuntos de dados menores, list comprehensions são concisas. As operações vetorizadas do NumPy oferecem vantagens significativas de desempenho para conjuntos de dados maiores e lógica mais complexa. apply()
fornece flexibilidade para operações complexas linha a linha ou coluna a coluna, enquanto map()
se destaca em mapeamentos de valores. Recomenda-se a realização de benchmarks em seus dados específicos para determinar a abordagem mais eficiente.