Pandas数据帧将函数应用于整个列

时间:2015-09-06 15:45:34

标签: python pandas

我有一些作用于列表并返回列表的函数。我想在Pandas Dataframe上创建一个列,以便新列是由一个作用于数据帧其他列的函数返回的列表。

在类似python的伪代码中:

def function(parameter, list):
    ...
    return output_list

df['New Column'] = function(parameter, df['Old Column'])

我尝试了不同的选项,包括上面的代码,使用.apply()方法等等......没有成功。

有办法做到这一点吗?谢谢!

编辑: 请参阅Brian Pendleton对解决方案的回答。数据框中的列是pandas的Series对象。只需要从所需的列表中创建一个系列。

df['New_Column'] = pd.Series(data=function(parameter,list))

2 个答案:

答案 0 :(得分:0)

如果您要将df["old column"]发送给该函数,那么您将发送一个pandas.Series对象。为什么不与该系列一起操作并返回相同形状的新系列。然后你就可以使用你的新任务分配。

答案 1 :(得分:0)

我认为你想:

  • 应用返回列表的函数
  • 将结果存储在DataFrame
  • 将列表拆分为不同的列

这是一个例子。

def my_funct(parameter):
return (1,2,3) + parameter

df = pd.DataFrame(np.random.randint(low=1, high=10, size=3), columns=['my_funct'])
#df['New Column'] = function(parameter, df['Old Column'])
df['my_funct'] = df['my_funct'].apply(lambda x: my_funct(x))

# After the function call the resulting lists are stored in one column

       my_funct
0     [5, 6, 7]
1  [10, 11, 12]
2     [6, 7, 8]

# Here is how to split the list into several columns

df = df['my_funct'].apply(pd.Series)

    0   1   2
0   5   6   7
1  10  11  12
2   6   7   8