Pandas Apply 函数返回两个新列

pandas

1个回答

写回答

zz406

2025-07-09 22:01

+ 关注

Pandas
Pandas

使用Pandas的Apply函数可以在数据分析和数据处理过程中非常方便地生成新列。Apply函数能够对DataFrame或Series的每个元素进行操作,并根据自定义的函数返回一个新的列。在本文中,我们将介绍Apply函数的用法,并通过一个案例来演示其功能。

Apply函数的基本用法

Apply函数的基本用法非常简单,只需要传入一个自定义函数即可。这个自定义函数将作用于DataFrame或Series的每个元素,并返回一个新的值。最后,Apply函数将所有新的值组成一个新的列。

下面是一个简单的例子,假设我们有一个包含学生考试成绩的DataFrame,我们希望根据每个学生的成绩计算他们的等级:

Python

import Pandas as pd

# 创建一个DataFrame

data = {'Name': ['Alice', 'Bob', 'Charlie'],

'Score': [85, 92, 78]}

df = pd.DataFrame(data)

# 定义一个函数,根据成绩返回等级

def get_grade(score):

if score >= 90:

return 'A'

elif score >= 80:

return 'B'

else:

return 'C'

# 使用Apply函数生成新的等级列

df['Grade'] = df['Score'].apply(get_grade)

print(df)

运行以上代码,输出的结果如下:

Name Score Grade

0 Alice 85 B

1 Bob 92 A

2 Charlie 78 C

可以看到,通过使用Apply函数,我们成功地根据学生的成绩生成了对应的等级列。

Apply函数的高级用法

除了基本用法之外,Apply函数还支持更复杂的操作。我们可以通过传递额外的参数给自定义函数,来实现更多的功能。

接下来,我们将通过一个例子来演示如何使用Apply函数计算商品的折扣价格。假设我们有一个包含商品原价的DataFrame,我们希望根据商品的折扣率来计算折扣价格:

Python

import Pandas as pd

# 创建一个DataFrame

data = {'Product': ['Apple', 'Banana', 'Orange'],

'Price': [10, 8, 12],

'Discount': [0.1, 0.2, 0.3]}

df = pd.DataFrame(data)

# 定义一个函数,根据原价和折扣率计算折扣价格

def calculate_discounted_price(price, discount_rate):

return price * (1 - discount_rate)

# 使用Apply函数生成新的折扣价格列

df['Discounted Price'] = df.apply(lambda row: calculate_discounted_price(row['Price'], row['Discount']), axis=1)

print(df)

运行以上代码,输出的结果如下:

Product Price Discount Discounted Price

0 Apple 10 0.1 9.0

1 Banana 8 0.2 6.4

2 Orange 12 0.3 8.4

可以看到,通过使用Apply函数和自定义函数,我们成功地根据商品的原价和折扣率生成了对应的折扣价格列。

使用Apply函数返回多个新列

除了生成一个新的列之外,Apply函数还可以返回多个新的列。我们只需要在自定义函数中返回一个Series对象,其中包含所有需要生成的新列。

下面是一个例子,假设我们有一个包含学生成绩的DataFrame,我们希望根据每个学生的成绩生成他们的等级和是否及格两个新列:

Python

import Pandas as pd

# 创建一个DataFrame

data = {'Name': ['Alice', 'Bob', 'Charlie'],

'Score': [85, 92, 78]}

df = pd.DataFrame(data)

# 定义一个函数,根据成绩返回等级和是否及格

def get_grade_and_pass(score):

if score >= 90:

grade = 'A'

elif score >= 80:

grade = 'B'

else:

grade = 'C'

if score >= 60:

pass_status = True

else:

pass_status = False

return pd.Series([grade, pass_status])

# 使用Apply函数生成新的等级和是否及格两列

df[['Grade', 'Pass']] = df['Score'].apply(get_grade_and_pass)

print(df)

运行以上代码,输出的结果如下:

Name Score Grade Pass

0 Alice 85 B True

1 Bob 92 A True

2 Charlie 78 C False

可以看到,通过使用Apply函数和返回Series对象的自定义函数,我们成功地生成了两个新的列——等级和是否及格。

通过Pandas的Apply函数,我们可以方便地在数据分析和数据处理过程中生成新的列。无论是简单的操作还是复杂的计算,Apply函数都能够满足我们的需求。希望本文对你理解和使用Apply函数有所帮助。

举报有用(4)分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号