使用pandas.apply()将一个函数应用到Dataframe的每一行或每一列

  • Post category:Python

使用pandas.apply()方法可以将一个自定义函数应用到DataFrame的每一行或每一列。接下来我将为您详细解释如何使用该方法,并给出一个实例说明。

函数定义

首先,我们需要定义一个自定义函数,该函数将被应用于DataFrame中的每一个元素。例如,我们定义如下函数:

def square(x):
    return x**2

该函数将返回输入参数的平方。

应用于每一行或每一列

接下来,我们需要明确我们希望将该函数应用于DataFrame的每一行还是每一列。为此,我们可以使用apply()方法的axis参数,其默认值为0,表示应用于每一列;1表示应用于每一行。例如,下面代码演示了如何将square()函数应用于DataFrame的每一列:

import pandas as pd

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

# 对每一列应用square()函数
df.apply(square)

输出结果如下:

   A   B   C
0  1  16  49
1  4  25  64
2  9  36  81

注意,上述代码返回的是一个新的DataFrame对象,并不会修改原始数据。

如果我们希望将square()函数应用于每一行,则可以将axis参数设置为1

# 对每一行应用square()函数
df.apply(square, axis=1)

输出结果如下:

   0   1   2
0  1  16  49
1  4  25  36
2  9  36  81

同样,上述代码返回的也是一个新的DataFrame对象。

实例说明

假设我们有一个简单的数据集,记录了一组人的身高和体重:

名字 身高(cm) 体重(kg)
Tom 170 65
Jack 175 68
Mary 162 52

我们现在希望计算每个人的BMI值(Body Mass Index)。BMI计算公式为:

$$BMI = \frac{体重}{身高^2}$$

我们可以定义以下函数来计算BMI值:

def calculate_bmi(height, weight):
    return weight / (height / 100) ** 2

接下来,我们将该函数应用于DataFrame中的每一行:

import pandas as pd

# 创建一个DataFrame对象
df = pd.DataFrame({
    '姓名': ['Tom', 'Jack', 'Mary'],
    '身高(cm)': [170, 175, 162],
    '体重(kg)': [65, 68, 52]
})

# 计算每个人的BMI值
df['BMI'] = df.apply(lambda row: calculate_bmi(row['身高(cm)'], row['体重(kg)']), axis=1)

# 输出结果
print(df)

最终输出结果为:

     姓名  身高(cm)  体重(kg)        BMI
0   Tom      170        65  22.491349
1  Jack      175        68  22.204082
2  Mary      162        52  19.810057

可以看到,我们成功地为每个人计算了BMI值,并将其添加到了DataFrame中。通过apply()方法,我们可以轻松地将自定义函数应用到DataFrame的每一行或每一列,从而实现数据的批量处理。