pandas apply lambda if

在 pandas 中,apply 函数是一个非常有用的函数,它可以对 DataFrame 或 Series 中的数据进行自定义的处理。而 lambda 函数则是一种匿名函数,可以在 apply 函数中被调用,用来进行一些简单的数据处理。
在实际的数据处理中,有时候我们需要根据某些条件来对数据进行不同的处理。这时候可以结合 apply 函数和 lambda 函数来实现条件处理。本文将详细介绍如何在 pandas 中使用 apply 函数结合 lambda 函数进行条件处理。
1. 基本用法
首先我们先来看一个简单的示例,假设有一个包含年龄数据的 DataFrame,我们想要根据年龄大于等于30岁的人标记为“老年”,小于30岁的人标记为“青年”。
首先创建一个示例数据:
import pandas as pd
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 32, 28, 35]}
df = pd.DataFrame(data)
print(df)
运行结果如下:
Name Age
0 Alice 25
1 Bob 32
2 Charlie 28
3 David 35
接着我们可以使用 apply 函数结合 lambda 函数来实现条件处理:
df['Category'] = df['Age'].apply(lambda x: '老年' if x >= 30 else '青年')
print(df)
运行结果如下:
Name Age Category
0 Alice 25 青年
1 Bob 32 老年
2 Charlie 28 青年
3 David 35 老年
可以看到,我们成功根据年龄的大小将人员分为了“老年”和“青年”。
2. 多条件处理
除了单一条件处理外,有时候我们可能需要根据多个条件来对数据进行处理。在这种情况下,我们可以在 lambda 函数中使用 and、or 等关键词来实现多条件处理。
接下来继续以年龄数据为例,假设我们需要对年龄在 30 岁以下的女性标记为“青年”,而年龄在 30 岁以上的男性标记为“老年”。
首先创建包含性别数据的示例数据:
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 32, 28, 35],
'Gender': ['Female', 'Male', 'Female', 'Male']}
df = pd.DataFrame(data)
print(df)
运行结果如下:
Name Age Gender
0 Alice 25 Female
1 Bob 32 Male
2 Charlie 28 Female
3 David 35 Male
接着我们可以使用多条件处理来为数据添加新的列:
df['Category'] = df.apply(lambda x: '青年' if x['Age'] < 30 and x['Gender'] == 'Female' else '老年' if x['Age'] >= 30 and x['Gender'] == 'Male' else '', axis=1)
print(df)
运行结果如下:
Name Age Gender Category
0 Alice 25 Female 青年
1 Bob 32 Male 老年
2 Charlie 28 Female 青年
3 David 35 Male 老年
可以看到,我们成功根据多个条件将人员分为了“老年”和“青年”。
3. 案例应用
实际数据处理中,我们可能会遇到更复杂的情况,例如根据不同的条件进行不同的数据处理。下面以一个更为复杂的案例来说明如何在 pandas 中使用 apply 函数结合 lambda 函数进行条件处理。
假设有一个包含订单商品和购买数量的 DataFrame,我们需要计算每个商品的总金额,但是需要根据不同的商品类型来使用不同的折扣率进行计算。
首先创建示例数据:
data = {'Product': ['A', 'B', 'A', 'C', 'B', 'C'],
'Quantity': [2, 3, 1, 5, 2, 4]}
df = pd.DataFrame(data)
print(df)
运行结果如下:
Product Quantity
0 A 2
1 B 3
2 A 1
3 C 5
4 B 2
5 C 4
接着我们可以根据不同的商品类型来使用不同的折扣率进行计算总金额:
discount_rate = {'A': 0.9, 'B': 0.8, 'C': 0.7}
def calculate_total(row):
discount = discount_rate.get(row['Product'], 1)
return row['Quantity'] * 10 * discount
df['Total'] = df.apply(lambda x: calculate_total(x), axis=1)
print(df)
运行结果如下:
Product Quantity Total
0 A 2 18.0
1 B 3 24.0
2 A 1 9.0
3 C 5 35.0
4 B 2 16.0
5 C 4 28.0
可以看到,我们成功根据不同的商品类型使用了不同的折扣率计算了每个商品的总金额。
结语
本文详细介绍了如何在 pandas 中使用 apply 函数结合 lambda 函数进行条件处理,包括基本用法、多条件处理和案例应用。
极客教程