我的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之前咨询。
答案 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]
我希望能正确理解你的问题。