【pandas】apply函数+匿名函数

1. DataFrame 的 apply() 用法

apply() 函数可以将一个函数应用于 DataFrame 的每一行或每一列,并返回一个新的 DataFrame 或 Series。

语法:

df.apply(func, axis=0, result_type=None, args=(), **kwargs)

参数:

  • func: 要应用的函数。该函数可以接受一个 Series 作为参数,并返回一个值。
  • axis: 指定要应用函数的方向。0 表示按行应用,1 表示按列应用。默认值为 0
  • result_type: 指定结果的类型。可以是 'expand', 'reduce', 'broadcast'None。默认值为 None
  • args: 传递给函数的额外参数。
  • kwargs: 传递给函数的额外关键字参数。

示例:

import pandas as pd

# 创建 DataFrame
df = pd.DataFrame({'column1': [1, 2, 3], 'column2': [4, 5, 6]})

# 将每个元素加 1
def add_one(x):
    return x + 1

df_new = df.apply(add_one)
print(df_new)

输出:

   column1  column2
0       2       5
1       3       6
2       4       7

注意:

  • apply() 函数可以应用于任何类型的函数,包括 lambda 函数。
  • result_type 参数用于控制结果的形状。
  • argskwargs 参数可以传递给函数额外的参数。

2. pandas 的 apply 用法举例

以下是一些使用 pandas.Series.applypandas.DataFrame.apply 的示例:

1. 对 Series 应用函数

import pandas as pd

# 创建一个 Series
series = pd.Series([1, 2, 3, 4, 5])

# 定义一个函数
def square(x):
    return x * x

# 使用 apply 应用函数
squared_series = series.apply(square)

# 打印结果
print(squared_series)

输出:

0     1
1     4
2     9
3    16
4    25
dtype: int64

2. 对 DataFrame 应用函数

import pandas as pd

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

# 定义一个函数
def multiply_columns(row):
    return row['A'] * row['B']

# 使用 apply 应用函数
result = df.apply(multiply_columns, axis=1)

# 打印结果
print(result)

输出:

0     4
1    10
2    18
dtype: int64

3. 使用 lambda 表达式

import pandas as pd

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

# 使用 lambda 表达式应用函数
result = df.apply(lambda row: row['A'] + row['B'], axis=1)

# 打印结果
print(result)

注意:一般来说lambda row里的row应该是一行数据(if axis=1);一列数据(if axis=0)

输出:

0     5
1     7
2     9
dtype: int64

4. 对不同列应用不同函数

import pandas as pd

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

# 定义两个函数
def square_column_a(row):
    return row['A'] * row['A']

def multiply_columns_b_and_c(row):
    return row['B'] * row['C']

# 使用 apply 应用函数
result = df.apply(lambda row: square_column_a(row) if row['A'] > 2 else multiply_columns_b_and_c(row), axis=1)

# 打印结果
print(result)

输出:

0    16
1    25
2    42
dtype: int64
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值