返回

如何在 Pandas 数据框的两列上应用函数?

python

在 Pandas 数据框的两列上应用函数

问题:

让我们想象一下一个常见的场景,你需要将一个函数应用于 Pandas 数据框中的两列,逐元素计算一个新列。例如,考虑一个数据框 df

df = pd.DataFrame({'ID': ['1', '2', '3'],
                   'col_1': [0, 2, 3],
                   'col_2': [1, 4, 5]})

现在,我们想创建一个新列 'col_3',该列应用于 'col_1''col_2' 的函数 get_sublist(start, end),其中 startend 分别是 'col_1''col_2' 的值。

尝试的解决方案:

我们的第一反应可能是:

df['col_3'] = df[['col_1', 'col_2']].apply(get_sublist, axis=1)

然而,这会抛出一个错误,因为 get_sublist 函数需要两个参数,而我们只传递了一个。

向量化解决方案:

为了解决这个问题,我们需要对函数进行向量化处理,以便它可以接受 Pandas 行对象并自动提取适当的列值。我们可以创建一个新的函数 get_sublist_vectorized

def get_sublist_vectorized(row):
    col1 = row['col_1']
    col2 = row['col_2']
    return get_sublist(col1, col2)

现在,我们可以应用这个向量化函数:

df['col_3'] = df[['col_1', 'col_2']].apply(get_sublist_vectorized, axis=1)

结果:

应用向量化函数后,df 将包含新列 'col_3'

  ID  col_1  col_2            col_3
0  1      0      1       ['a', 'b']
1  2      2      4  ['c', 'd', 'e']
2  3      3      5  ['d', 'e', 'f']

总结:

将函数应用于 Pandas 数据框的两列需要使用向量化函数。通过将函数重写为 get_sublist_vectorized,我们可以将 get_sublist 应用于每一行,从而创建新列 'col_3',该列包含基于 'col_1''col_2' 值的子列表。

常见问题解答:

1. 什么是向量化函数?

向量化函数是接受 Pandas 行对象作为输入并自动提取适当列值的函数。这使得将函数应用于大量数据更加高效。

2. 为什么需要向量化函数?

如果我们尝试将非向量化函数应用于 Pandas 数据框,我们会遇到错误,因为该函数需要明确指定参数。

3. 如何创建向量化函数?

要创建向量化函数,请使用 lambda 表达式或定义一个单独的函数,其中将 Pandas 行对象作为第一个参数。

4. 如何应用向量化函数?

使用 apply() 方法将向量化函数应用于 Pandas 数据框。该方法将函数逐行应用于数据框,创建新列或修改现有列。

5. 我可以将向量化函数应用于多个列吗?

是的,你可以使用 apply() 方法将向量化函数应用于多个列,方法是将列名作为列表传递给该方法。