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

时间:2015-07-08 13:15:56

标签: python pandas dataframe series

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

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中有大约80,000个列表,在AP中有20个列表,并且函数f有点耗时,因此应该担心计算成本。

我实现目标的想法是为每个pandas.Series构建len(AP)长度OP,然后将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,谢谢。

1 个答案:

答案 0 :(得分:1)

你可以使用一些嵌套的list comprehension,然后应用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)