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)
为了简化我的问题,假设我有两个列表列表和一个如下所示的函数:
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)