在Pandas数据框中的单独列中应用函数。
在Pandas数据框中的单独列中应用函数。
假设我有一个df
,它有'ID','col_1','col_2'
三列。我定义了一个函数:
f = lambda x, y : my_function_expression
。
现在我想将f
应用于df
的两列'col_1','col_2'
,逐元素地计算出一个新列'col_3'
,类似于:
df['col_3'] = df[['col_1','col_2']].apply(f) # Pandas报错:TypeError: ('() takes exactly 2 arguments (1 given)'
怎么做呢?
** 添加以下详细示例 ***
import pandas as pd df = pd.DataFrame({'ID':['1','2','3'], 'col_1': [0,2,3], 'col_2':[1,4,5]}) mylist = ['a','b','c','d','e','f'] def get_sublist(sta,end): return mylist[sta:end+1] #df['col_3'] = df[['col_1', 'col_2']].apply(get_sublist,axis=1) # 期望上述输出df如下 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数据框中的不同列应用函数,但不知道如何实现。用户尝试了一些方法,但没有成功。
解决方法是使用apply
函数,将要应用的函数作为参数传递给它。用户可以使用lambda表达式来定义函数,并将其应用于数据框的每一行。此方法可以避免使用不安全的数值索引,而是使用安全的列名来访问列。
以下是解决问题的示例代码:
import pandas as pd df = pd.DataFrame({'ID':['1', '2', '3'], 'col_1': [0, 2, 3], 'col_2':[1, 4, 5]}) def get_sublist(sta, end): return mylist[sta:end+1] df['col_3'] = df.apply(lambda x: get_sublist(x.col_1, x.col_2), axis=1)
问题得到解决后,输出如下:
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]
如果列名包含空格或与现有数据框属性重名,可以使用方括号进行索引:
df['col_3'] = df.apply(lambda x: f(x['col 1'], x['col 2']), axis=1)
在使用axis=1
时,如果列名为name
,则实际上不会返回列数据,而是返回索引。这可以通过重命名列名来解决。
使用apply
函数可以方便地在Pandas数据框的不同列上应用函数。使用lambda表达式可以定义具有多个输入值的用户自定义函数,并使用列名而不是数值索引来访问列。如果列名包含空格或与现有属性重名,可以使用方括号进行索引。此方法在解决问题时非常有用。