Data Analysis

Criando Colunas de DataFrame Eficientemente com Base em Condições no Pandas

Spread the love

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

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.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *