如何在 Pandas 数据框的两列上应用函数?
2024-03-30 06:28:54
在 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)
,其中 start
和 end
分别是 '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()
方法将向量化函数应用于多个列,方法是将列名作为列表传递给该方法。