pandas apply函数

pandasapply 方法非常强大,可以在 DataFrame 或 Series 上应用函数。以下是一些基本的用法示例。

1. 在 DataFrame 上使用 apply

示例:对列应用函数

假设我们有一个包含学生成绩的 DataFrame,想要计算每个学生的总成绩。

import pandas as pd

# 创建示例 DataFrame
data = {
    '数学': [90, 80, 85],
    '英语': [95, 70, 88],
    '科学': [85, 90, 80]
}
df = pd.DataFrame(data)

# 定义一个函数
def total_score(row):
    return row.sum()

# 使用 apply 方法对每一行应用函数
df['总成绩'] = df.apply(total_score, axis=1)
print(df)

2. 在 Series 上使用 apply

示例:对单列应用函数

如果想要对某一列进行操作,比如将所有成绩转换为百分制:

# 定义一个转换函数
def to_percentage(score):
    return score / 100

# 对 '数学' 列应用函数
df['数学百分制'] = df['数学'].apply(to_percentage)
print(df)

3. 使用 lambda 函数

你可以使用 lambda 函数来简化代码。例如,计算每个学生的平均分:

# 使用 lambda 函数计算平均分
df['平均分'] = df.apply(lambda row: row.mean(), axis=1)
print(df)

4. 处理缺失值

在处理缺失值时,apply 也很有用。例如,将缺失值替换为列的均值:

# 创建包含缺失值的 DataFrame
df_with_nan = df.copy()
df_with_nan.loc[1, '英语'] = None

# 使用 apply 填充缺失值
df_with_nan['英语'] = df_with_nan['英语'].apply(lambda x: x if pd.notnull(x) else df_with_nan['英语'].mean())
print(df_with_nan)

在 Python 中,如果你想在函数内部修改外部变量并在后续调用中使用新的值,可以通过使用可变数据类型(如列表或字典)来实现,因为这些类型的值可以被修改,而不需要重新赋值。下面是一些示例,展示如何实现这一点。

示例:使用列表作为可变数据类型

import pandas as pd

# 创建示例 DataFrame
data = {
    '数学': [90, 80, 85],
    '英语': [95, 70, 88]
}
df = pd.DataFrame(data)

# 使用一个列表来存储可变的外部变量
bonus = [5]  # 使用列表以便可以修改

# 定义一个函数,使用外部变量并修改它
def add_bonus(score):
    score_with_bonus = score + bonus[0]  # 使用当前的 bonus 值
    bonus[0] += 2  # 修改外部变量,以便下次调用时使用新的值
    return score_with_bonus

# 应用函数
df['数学加分'] = df['数学'].apply(add_bonus)
print(df)

# 再次应用以查看 bonus 的变化
df['英语加分'] = df['英语'].apply(add_bonus)
print(df)

输出结果

第一次调用 add_bonus 时,bonus 为 5;第二次调用时,bonus 增加到 7。

示例:使用字典作为可变数据类型

你还可以使用字典来存储多个外部变量。

# 使用字典来存储可变的外部变量
variables = {'bonus': 5}

# 定义一个函数,使用外部变量并修改它
def add_custom_bonus(score):
    score_with_bonus = score + variables['bonus']
    variables['bonus'] += 1  # 修改外部变量
    return score_with_bonus

# 应用函数
df['科学加分'] = df['数学'].apply(add_custom_bonus)
print(df)

# 再次应用以查看 bonus 的变化
df['数学再加分'] = df['数学'].apply(add_custom_bonus)
print(df)

实例:

import pandas as pd

# 创建示例 DataFrame
data = {
    '收入': [30000, 45000, 50000],
}
df = pd.DataFrame(data)

# 使用字典作为外部变量
外部变量 = {'奖金': 5000}

# 定义一个函数,修改外部变量
def calculate_final_income(row):
    外部变量['奖金'] += 1000  # 修改外部变量
    return row['收入'] + 外部变量['奖金']

# 对每一行应用函数
df['最终收入'] = df.apply(calculate_final_income, axis=1)

# 输出结果和外部变量
print(df)
print("当前奖金:", 外部变量['奖金'])

  执行上述代码后,你会得到类似以下的输出结果:

      收入    最终收入
0  30000  36000
1  45000  47000
2  50000  51000
当前奖金: 7000


解释
外部变量:字典 外部变量 用于存储奖金信息。
函数:calculate_final_income 函数在计算每行的最终收入时会增加奖金,并更新外部变量的值。
应用函数:使用 apply 方法对 DataFrame 的每一行调用该函数,计算最终收入。
奖金变化:每次调用函数时,奖金增加 1000,最后输出的奖金为 7000。

小结

  • 使用可变类型:通过使用列表或字典,你可以存储和修改外部变量,而不需要创建新的变量。
  • 修改外部变量:在函数内部对列表或字典进行修改,可以影响后续的函数调用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值