Data Analysis

基于条件高效创建Pandas DataFrame列

Spread the love

Pandas是一个强大的Python库,用于数据处理和分析。根据条件创建DataFrame中的新列是一项常见任务。本文探讨了几种高效的方法来实现这一点,优先考虑清晰度和性能。我们将介绍列表推导式、NumPy方法、pandas.DataFrame.applypandas.Series.map(),并比较它们的优缺点。

目录

使用列表推导式创建条件列

列表推导式提供了一种简洁的语法,用于根据简单的条件创建新列。它们对于较小的DataFrame尤其高效。但是,它们的性能在较大的数据集上可能会下降。


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)

利用NumPy进行优化的条件逻辑

NumPy提供了高度优化的向量化运算,显著提高了性能,尤其是在较大的DataFrame上。np.where()对于条件赋值特别有用。


import numpy as np

df['SalesCategory_np'] = np.where(df['Sales'] > 200, 'High', 'Low')
print(df)

使用pandas.DataFrame.apply()进行灵活的条件逻辑

apply()方法为更复杂的条件逻辑提供了灵活性,可以按行(axis=1)或按列(axis=0)应用函数。但是,对于非常大的DataFrame,尤其是在计算密集型函数的情况下,它可能比NumPy慢。


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)

使用pandas.Series.map()高效地进行值映射

map()方法非常适合将一组值映射到另一组值,从而高效地创建分类列。


region_mapping = {'North': 'Northern Region', 'South': 'Southern Region', 'East': 'Eastern Region', 'West': 'Western Region'}
df['RegionMapped'] = df['Region'].map(region_mapping)
print(df)

性能比较和建议

最佳方法取决于条件复杂度、DataFrame大小和性能要求等因素。对于简单的条件和较小的数据集,列表推导式简洁明了。对于较大的数据集和更复杂的逻辑,NumPy的向量化运算具有显著的性能优势。apply()为复杂的按行或按列操作提供了灵活性,而map()擅长值映射。建议对您的特定数据进行基准测试,以确定最有效的方法。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注