当前位置: 首页 > article >正文

pandas中的apply方法使用

apply 用于对 DataFrame 或 Series 中的数据进行逐行或逐列的操作。它可以接受一个函数(通常是 lambda 函数或自定义函数),并将该函数应用到每一行或每一列上。apply语法:

DataFrame.apply(func, axis=0, raw=False, result_type=None, args=(), **kwargs)
  • func:要应用的函数。可以是lambda函数、自定义函数或内置函数。

  • axis

    默认是0,将函数应用到每一列

    axis = 1表示将函数应用到每一行

  • raw

    默认是False,将每一行或每一列作为 Series 传递给函数。

    raw = True,表示将每一行或每一列作为 NumPy 数组传递给函数。

对每一列应用函数

import pandas as pd

df = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [4, 5, 6]
})

result = df.apply(sum)
print(result)
# A     6     
# B    15     
# dtype: int64

对每一行应用函数

import pandas as pd

df = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [4, 5, 6]
})

result = df.apply(sum, axis=1)
print(result)
# 0    5      
# 1    7      
# 2    9      
# dtype: int64

使用lambda函数

import pandas as pd

df = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [4, 5, 6]
})

# 对每一行计算 A 和 B 的乘积
result = df.apply(lambda row: row['A'] * row['B'], axis=1)
print(result)
# 0     4
# 1    10
# 2    18
# dtype: int64

使用自定义函数

import pandas as pd

df = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [4, 5, 6]
})

# 自定义函数:计算 A 和 B 的平方和
def square_sum(row:pd.Series) -> int:
    return row['A'] ** 2 + row['B'] ** 2

# 对每一行应用自定义函数
result = df.apply(square_sum, axis=1)
print(result)
# 0    17
# 1    29
# 2    45
# dtype: int64

apply 是逐行或逐列操作的,因此在处理大规模数据时可能较慢。在处理大规模数据时,需注意性能问题,尽量使用向量化操作。

力扣上的pandas题:1873. 计算特殊奖金 - 力扣(LeetCode)

编写解决方案,计算每个雇员的奖金。如果一个雇员的 id 是 奇数 并且他的名字不是以 'M' 开头,那么他的奖金是他工资的 100% ,否则奖金为 0

解题思路就是使用apply方法。

import pandas as pd

def calculate_special_bonus(employees: pd.DataFrame) -> pd.DataFrame:
    employees['bonus'] = employees.apply(
        lambda x: x['salary'] if x['employee_id'] % 2 == 1 and not x['name'].startswith('M') else 0,
        axis = 1
    )
    return employees[['employee_id', 'bonus']].sort_values(by='employee_id')
    

http://www.kler.cn/a/529074.html

相关文章:

  • AI(计算机视觉)自学路线
  • 本地部署DeepSeek开源多模态大模型Janus-Pro-7B实操
  • 如何在Windows、Linux和macOS上安装Rust并完成Hello World
  • Keepalived高可用集群企业应用实例二
  • 深度学习篇---数据存储类型
  • MINIRAG: TOWARDS EXTREMELY SIMPLE RETRIEVAL-AUGMENTED GENERATION论文翻译
  • 【漫话机器学习系列】074.异方差(Heteroscedasticity)
  • 【Linux】23.进程间通信(2)
  • 局域网文件互传:手机与电脑的便捷传输利器
  • 《Ollama与DeepSeek》
  • 力扣-链表-142 环形链表Ⅱ
  • AI(计算机视觉)自学路线
  • 【模拟汽笛ISIS】2022-9-15
  • BUUCTF [Black Watch 入群题]PWN1 题解
  • JAVA学习-练习试用Java实现“使用Swing创建一个带有按钮的窗口”
  • 一些计算机零碎知识随写(25年2月)
  • 论文和代码解读:RF-Inversion 图像/视频编辑技术
  • 7 与mint库对象互转宏(macros.rs)
  • 快速提升网站收录:利用网站分析工具
  • 比较热门的嵌入式项目
  • Maya软件安装步骤与百度网盘链接
  • ArkTS高性能编程实践
  • Linux进程控制:【进程创建】【进程终止】【进程等待】【进程程序替换】【自主shell命令行解释器】
  • Android 音视频编解码 -- MediaCodec
  • 自动化测试框架搭建-封装requests-优化
  • 42【语言的编码架构】