Python 将函数应用于两个列表列表,将结果存储在 Dataframe 中

Python apply a func to two lists of lists, store the result in a Dataframe

为了简化我的问题,假设我有两个列表列表和一个如下所示的函数:

OP = [[1,2,3],[6,2,7,4],[4,1],[8,2,6,3,1],[6,2,3,1,5], [3,1],[3,2,5,4]]
AP = [[2,4], [2,3,1]]

def f(listA, listB):
    return len(listA+listB) # my real f returns a number as well

我想获得 f(OP[i],AP[j]) for each i, j,所以我的想法是创建一个 pandas.Dataframe,如下所示:

            AP[0]          AP[1]
OP[0]   f(AP[0],OP[0])  f(AP[1],OP[0])
OP[1]   f(AP[0],OP[1])  f(AP[1],OP[1])
OP[2]   f(AP[0],OP[2])  f(AP[1],OP[2])
OP[3]   f(AP[0],OP[3])  f(AP[1],OP[3])
OP[4]   f(AP[0],OP[4])  f(AP[1],OP[4])
OP[5]   f(AP[0],OP[5])  f(AP[1],OP[5])
OP[6]   f(AP[0],OP[6])  f(AP[1],OP[6])

我的真实数据实际上OP有80000个左右的列表,AP有20个左右的列表,函数f有点耗时,所以计算成本要担心。

我实现目标的想法是为每个 OP 构造一个长度 len(AP)pandas.Series,然后将 Series 附加到最后的 Dataframe. 例如,对于 OP[0],首先创建一个 Series,其中包含 f(OP[0],AP[i]) for each i.

的所有信息

我在构建 Series 时遇到了困难。我尝试了 pandas.Series.apply()map() 但它们都不起作用,因为我的函数 f 需要两个参数。

我也愿意接受任何其他获得 f(OP[i],AP[j]) for each i, j 的建议,谢谢。

您可以使用一些嵌套的 list comprehension, followed by an application of pandas.DataFrame.from_records:

import pandas as pd

records = [tuple(f(A, O) for A in AP) for O in OP]
pd.DataFrame.from_records(records)