Pandas中如何使用apply函数处理多列数据

Pandas中如何使用apply函数处理多列数据

参考:pandas apply multiple columns

Pandas是一个强大的Python数据分析库,它提供了许多用于数据处理和分析的功能。在处理DataFrame时,apply函数是一个非常有用的工具,它允许用户对数据进行复杂的转换和操作。本文将详细介绍如何在Pandas中使用apply函数处理多列数据。

1. apply函数简介

在Pandas中,apply函数可以被用于DataFrame的行或列,它接受一个函数(可以是内置的或自定义的)并应用于每一行或每一列。当处理多列数据时,apply函数尤其有用,因为它可以同时考虑多个列的数据进行计算或转换。

2. 使用apply处理多列

要使用apply函数处理多列,你需要定义一个接受多个参数的函数,这些参数对应于DataFrame中的列。然后,你可以通过设置axis=1来指定函数应用于行,这样每行的多个列值都会作为参数传递给你的函数。

示例代码1:计算两列的和

import pandas as pd

# 创建一个示例DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [4, 5, 6]
})

# 定义一个函数,计算两列的和
def sum_two_columns(row):
    return row['A'] + row['B']

# 使用apply函数
df['Sum'] = df.apply(sum_two_columns, axis=1)
print(df)

Output:

Pandas中如何使用apply函数处理多列数据

示例代码2:根据条件创建新列

import pandas as pd

# 创建一个示例DataFrame
df = pd.DataFrame({
    'A': [10, 20, 30],
    'B': [20, 30, 40]
})

# 定义一个函数,根据条件创建新列
def check_values(row):
    if row['A'] > 15 and row['B'] < 35:
        return 'pandasdataframe.com'
    else:
        return 'Other'

# 使用apply函数
df['Category'] = df.apply(check_values, axis=1)
print(df)

Output:

Pandas中如何使用apply函数处理多列数据

示例代码3:合并多列为一列

import pandas as pd

# 创建一个示例DataFrame
df = pd.DataFrame({
    'First Name': ['John', 'Jane', 'Doe'],
    'Last Name': ['Doe', 'Doe', 'Smith']
})

# 定义一个函数,合并名字和姓氏
def full_name(row):
    return f"{row['First Name']} {row['Last Name']}"

# 使用apply函数
df['Full Name'] = df.apply(full_name, axis=1)
print(df)

Output:

Pandas中如何使用apply函数处理多列数据

示例代码4:计算多列的平均值

import pandas as pd

# 创建一个示例DataFrame
df = pd.DataFrame({
    'Math': [88, 92, 85],
    'Science': [90, 91, 89]
})

# 定义一个函数,计算平均分
def average_score(row):
    return (row['Math'] + row['Science']) / 2

# 使用apply函数
df['Average'] = df.apply(average_score, axis=1)
print(df)

Output:

Pandas中如何使用apply函数处理多列数据

示例代码5:转换数据格式

import pandas as pd

# 创建一个示例DataFrame
df = pd.DataFrame({
    'Date': ['2021-01-01', '2021-01-02', '2021-01-03'],
    'Value': [100, 200, 300]
})

# 定义一个函数,转换日期格式并增加值
def transform_data(row):
    new_date = pd.to_datetime(row['Date']).strftime('%Y/%m/%d')
    new_value = row['Value'] + 10
    return f"{new_date} - Value: {new_value}"

# 使用apply函数
df['Transformed'] = df.apply(transform_data, axis=1)
print(df)

Output:

Pandas中如何使用apply函数处理多列数据

示例代码6:根据多列数据分类

import pandas as pd

# 创建一个示例DataFrame
df = pd.DataFrame({
    'Age': [25, 35, 45],
    'Salary': [50000, 60000, 70000]
})

# 定义一个函数,根据年龄和薪水分类
def categorize(row):
    if row['Age'] < 30 and row['Salary'] > 55000:
        return 'Category A'
    elif row['Age'] >= 30 and row['Salary'] <= 65000:
        return 'Category B'
    else:
        return 'Category C'

# 使用apply函数
df['Category'] = df.apply(categorize, axis=1)
print(df)

Output:

Pandas中如何使用apply函数处理多列数据

示例代码7:计算增长率

import pandas as pd

# 创建一个示例DataFrame
df = pd.DataFrame({
    'Year 1': [100, 150, 200],
    'Year 2': [110, 165, 220]
})

# 定义一个函数,计算年增长率
def growth_rate(row):
    return ((row['Year 2'] - row['Year 1']) / row['Year 1']) * 100

# 使用apply函数
df['Growth %'] = df.apply(growth_rate, axis=1)
print(df)

Output:

Pandas中如何使用apply函数处理多列数据

示例代码8:多条件复杂逻辑

import pandas as pd

# 创建一个示例DataFrame
df = pd.DataFrame({
    'Product': ['A', 'B', 'C'],
    'Price': [100, 200, 300],
    'Stock': [30, 20, 15]
})

# 定义一个函数,根据价格和库存决定标签
def label_product(row):
    if row['Price'] > 150 and row['Stock'] < 25:
        return 'High Price Low Stock'
    elif row['Price'] <= 150 and row['Stock'] >= 25:
        return 'Low Price High Stock'
    else:
        return 'Normal'

# 使用apply函数
df['Label'] = df.apply(label_product, axis=1)
print(df)

Output:

Pandas中如何使用apply函数处理多列数据

示例代码9:格式化字符串

import pandas as pd

# 创建一个示例DataFrame
df = pd.DataFrame({
    'Name': ['John Doe', 'Jane Smith', 'Emily Jones'],
    'Email': ['john@example.com', 'jane@example.com', 'emily@example.com']
})

# 定义一个函数,格式化联系信息
def format_contact(row):
    return f"Name: {row['Name']}, Email: {row['Email']}"

# 使用apply函数
df['Contact Info'] = df.apply(format_contact, axis=1)
print(df)

Output:

Pandas中如何使用apply函数处理多列数据

示例代码10:计算加权平均

import pandas as pd

# 创建一个示例DataFrame
df = pd.DataFrame({
    'Score': [88, 92, 85],
    'Weight': [0.5, 0.3, 0.2]
})

# 定义一个函数,计算加权平均
def weighted_average(row):
    return row['Score'] * row['Weight']

# 使用apply函数
df['Weighted Score'] = df.apply(weighted_average, axis=1)
print(df)

Output:

Pandas中如何使用apply函数处理多列数据

3. 进阶使用apply函数

在处理更复杂的数据转换和分析时,apply函数的灵活性显得尤为重要。下面我们将通过更多示例,探索apply函数在不同场景下的应用。

示例代码11:多列条件筛选

import pandas as pd

# 创建一个示例DataFrame
df = pd.DataFrame({
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35],
    'Income': [50000, 60000, 70000]
})

# 定义一个函数,根据年龄和收入筛选数据
def filter_data(row):
    if row['Age'] > 28 and row['Income'] >= 60000:
        return True
    return False

# 使用apply函数
df['Selected'] = df.apply(filter_data, axis=1)
print(df)

Output:

Pandas中如何使用apply函数处理多列数据

示例代码12:多列数据转换

import pandas as pd

# 创建一个示例DataFrame
df = pd.DataFrame({
    'Temperature (C)': [22, 24, 19],
    'Humidity (%)': [80, 60, 78]
})

# 定义一个函数,转换温度到华氏度并计算舒适度
def convert_and_compute(row):
    temp_f = row['Temperature (C)'] * 9/5 + 32
    comfort = 'Comfortable' if row['Humidity (%)'] < 70 else 'Uncomfortable'
    return f"{temp_f} F - {comfort}"

# 使用apply函数
df['Weather Info'] = df.apply(convert_and_compute, axis=1)
print(df)

Output:

Pandas中如何使用apply函数处理多列数据

示例代码13:多列数据合并

import pandas as pd

# 创建一个示例DataFrame
df = pd.DataFrame({
    'Day': [1, 2, 3],
    'Month': [5, 6, 7],
    'Year': [2021, 2021, 2021]
})

# 定义一个函数,合并日期
def merge_date(row):
    return f"{row['Year']}-{row['Month']:02d}-{row['Day']:02d}"

# 使用apply函数
df['Date'] = df.apply(merge_date, axis=1)
print(df)

Output:

Pandas中如何使用apply函数处理多列数据

示例代码14:复杂逻辑运算

import pandas as pd

# 创建一个示例DataFrame
df = pd.DataFrame({
    'Product': ['Widget', 'Gadget', 'Doodad'],
    'Price': [25.00, 15.00, 20.00],
    'Quantity': [5, 10, 3]
})

# 定义一个函数,计算总价并判断是否优惠
def total_price(row):
    total = row['Price'] * row['Quantity']
    discount = 'Discount' if total > 100 else 'No Discount'
    return f"Total: ${total}, {discount}"

# 使用apply函数
df['Sales Info'] = df.apply(total_price, axis=1)
print(df)

Output:

Pandas中如何使用apply函数处理多列数据

示例代码15:数据清洗和格式化

import pandas as pd

# 创建一个示例DataFrame
df = pd.DataFrame({
    'Phone Number': ['123-456-7890', '987-654-3210', '+1-234-567-8901']
})

# 定义一个函数,格式化电话号码
def format_phone(row):
    return row['Phone Number'].replace('-', '').replace('+1', '')

# 使用apply函数
df['Clean Phone'] = df.apply(format_phone, axis=1)
print(df)

Output:

Pandas中如何使用apply函数处理多列数据

示例代码16:多列数据分析

import pandas as pd

# 创建一个示例DataFrame
df = pd.DataFrame({
    'Height (cm)': [172, 165, 180],
    'Weight (kg)': [70, 60, 75]
})

# 定义一个函数,计算身体质量指数(BMI)
def calculate_bmi(row):
    height_m = row['Height (cm)'] / 100
    bmi = row['Weight (kg)'] / (height_m ** 2)
    return round(bmi, 2)

# 使用apply函数
df['BMI'] = df.apply(calculate_bmi, axis=1)
print(df)

Output:

Pandas中如何使用apply函数处理多列数据

示例代码17:多列数据校验

import pandas as pd

# 创建一个示例DataFrame
df = pd.DataFrame({
    'Username': ['user1', 'user2', 'user3'],
    'Email': ['user1@example.com', 'user2@example.com', 'user3@example.com']
})

# 定义一个函数,校验电子邮件是否包含用户名
def validate_email(row):
    return row['Username'] in row['Email']

# 使用apply函数
df['Is Valid'] = df.apply(validate_email, axis=1)
print(df)

Output:

Pandas中如何使用apply函数处理多列数据

示例代码18:数据转换和映射

import pandas as pd

# 创建一个示例DataFrame
df = pd.DataFrame({
    'Score': [88, 76, 92],
    'Grade': ['B', 'C', 'A']
})

# 定义一个函数,映射成绩到描述
def map_grade(row):
    grade_map = {'A': 'Excellent', 'B': 'Good', 'C': 'Average'}
    return grade_map.get(row['Grade'], 'Unknown')

# 使用apply函数
df['Description'] = df.apply(map_grade, axis=1)
print(df)

Output:

Pandas中如何使用apply函数处理多列数据

示例代码19:多列数据整合

import pandas as pd

# 创建一个示例DataFrame
df = pd.DataFrame({
    'First Name': ['John', 'Jane', 'Doe'],
    'Last Name': ['Doe', 'Smith', 'Johnson']
})

# 定义一个函数,整合名字
def integrate_names(row):
    return f"{row['First Name']} {row['Last Name']}"

# 使用apply函数
df['Full Name'] = df.apply(integrate_names, axis=1)
print(df)

Output:

Pandas中如何使用apply函数处理多列数据

示例代码20:复杂数据处理

import pandas as pd

# 创建一个示例DataFrame
df = pd.DataFrame({
    'Data': ['2021-01-01', '2021-02-01', '2021-03-01'],
    'Value': [100, 200, 300]
})

# 定义一个函数,处理日期和值
def process_data(row):
    new_date = pd.to_datetime(row['Data']).strftime('%B %d, %Y')
    new_value = row['Value'] * 1.1  # 增加10%
    return f"Date: {new_date}, Adjusted Value: {new_value}"

# 使用apply函数
df['Processed'] = df.apply(process_data, axis=1)
print(df)

Output:

Pandas中如何使用apply函数处理多列数据

5. 结论

通过本文的介绍和示例,我们可以看到Pandas的apply函数在数据处理中的强大功能和灵活性。无论是简单的数据转换还是复杂的逻辑运算,apply函数都能有效地帮助我们实现多列数据的处理。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程