如何使用pandas df正确使用lambda?

时间:2017-03-23 03:25:48

标签: python pandas

我的pandas df很少,而且需要一个接一个地处理很少的功能。因此,对于通过第一个函数后的某个df,生成的df将需要以相同的方式使用顺序函数进行处理。伪代码可能如下,

df =  func_1(df)
df =  func_2(df)
df =  func_3(df) 

以后添加到列表中,例如lis.append(df)。使用循环,代码可能如下所示,

storage = []
for df in dfs:
    for func in functions:
        df = func(df)
    storage.append(df)

 df = pd.concat(storage, ignore_index=True)

最终,我可能会使用concat来生成最终的df。上面的代码是它的假设,我的代码如下。虽然代码运行完美,但它与我的意图不同。

storage = [map(lambda df: f(df) , dfs) for f in functions][-1]
df = pd.concat(storage, ignore_index=True)

对于存储,右侧会生成一个列表,其元素编号等于dfs,最后一个元素(-1)恰好是List Of 1 Element进程,其中dfs包含所有函数并连接在一起。以下是区别,前面的storage列表生成所有dfs都继续使用函数,元素编号与dfs相同。

我的问题:如何使用lambda函数获取存储列表?该列表应包含与dfs的数量相同的元素数量,并应使用所有函数进行处理。

如果您有疑问,我会尽力解释一下,但请在downvote之前咨询。

1 个答案:

答案 0 :(得分:1)

好的,让我们将你的任务分解成碎片。

首先,您要将函数列表应用于同一对象。我会坚持使用这个简单的例子,但想法是一样的。首先,让我们定义一个辅助函数,它接受一个函数列表并将它们相互应用:

 apply_rec = lambda f, d: f[0](d) if len(f) == 1 else apply_rec (f[1:], f[0](d))

它接受一系列功能和初始数据。如果列表只包含一个函数,它会将其应用于数据并返回结果;否则,它会削减'远离列表中的第一个函数,将其应用于数据并使用这些输入调用自身。

让我们试一试:

 data = 10
 fs = [lambda x = x+1, lambda x = x * 2, lambda x = x ** 2]
 >>> apply_rec (fs, data)
484

现在您可以执行以下操作:

storage = [apply_rec (functions, df) for df in dfs]

我希望能正确理解你的问题。