详解pandas.DataFrame.apply()(应用函数到数据框)函数使用方法

  • Post category:Python

pandas.DataFrame.apply()是 Pandas 库中的一个用于 DataFrame 类型数据的方法,它可以作用于整个 DataFrame 或某个指定的轴(行或列),并将特定的函数应用到该轴上的各个元素之上,它会返回一个由各行或各列运用函数后的新的 DataFrame 对象。

具体而言,函数通常接受一个 Series 类型的数据作为参数,并针对这个 Series 进行处理。在 DataFrame 中,此操作的作用对象可以是行或列。该函数接受以下参数:

  • func:需要处理 Series 数据的函数,可以是函数名、lambda 表达式或 list/set 类型的聚合函数;
  • axis:表示处理的轴,0 表示处理列,1 表示处理行;
  • raw:默认为 False,表示在函数中传入的是数据帧的每个元素。当 raw=True 时,表示在函数中传入一行或一列的数据;
  • result_type:表示返回数据的类型,默认为 “expand”,表示返回包含列索引的 DataFrame;或者 “reduce”,表示返回只有一列的 Series;
  • args, kwargs:表示传入到 func 中的其他参数和关键字参数;

以下是通过两个实例来详细讲解pandas.DataFrame.apply() 的使用方法和作用:

示例一:

假设现在有一个餐厅的销售记录表格,我们想要计算每个员工的销售总额。表格如下:

销售员工 销售额(元) 日期
Tom 1300 2021-08-01
Tom 800 2021-08-02
Tom 1000 2021-08-03
Jim 900 2021-08-01
Jim 1200 2021-08-02
Jim 600 2021-08-03

我们可以使用apply()方法对每个员工的销售额进行求和,代码如下:

import pandas as pd

# 读取 CSV 文件
df = pd.read_csv('sales.csv')

# 定义求和函数
def sum_sales(series):
    return series.sum()

# 按照销售员工分组并计算销售额之和
sales_sum = df.groupby(by="销售员工")["销售额(元)"].apply(sum_sales)

print(sales_sum)

运行上述代码后,我们将得到每个员工的销售总额:

销售员工
Jim    2700
Tom    3100
Name: 销售额(元), dtype: int64

可以看到该方法可以将每个组内的关键信息提取出来并计算总和。

示例二:

现在有一个 DataFrame 数据,每个元素都是一个列表或元组。我们需要将这些列表或元组中的元素进行平坦化,并且去除重复元素,输出一个新的 DataFrame 数据。数据如下:

数据
[1,2,2,3]
[2,3,4]
[3,4,5,6]

我们可以使用apply()方法以及 set() 函数来实现,去掉列表中的重复元素,代码如下:

import pandas as pd

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

# 定义函数
def func(x):
    return pd.Series(list(set(x)))

# 应用函数
result = df['数据'].apply(func)

print(result)

运行上述代码后,我们将得到去重后的新 DataFrame 数据:

   0  1   2   3
0  1  2   3 NaN
1  2  3   4 NaN
2  3  4   5   6

可以看到该方法可以将 DataFrame 数据的每个元素进行函数处理后,将结果注入到新的 DataFrame 数据中。

综上,pandas.DataFrame.apply() 能够对 DataFrame 数据中的元素进行函数式处理,并将处理后的结果存入到新的 DataFrame 对象中。