在Pandas数据框中的单独列中应用函数。

38 浏览
0 Comments

在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']

0
0 Comments

问题的出现原因是用户想要在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表达式可以定义具有多个输入值的用户自定义函数,并使用列名而不是数值索引来访问列。如果列名包含空格或与现有属性重名,可以使用方括号进行索引。此方法在解决问题时非常有用。

0