【问题标题】:Python apply a func to two lists of lists, store the result in a DataframePython 将 func 应用于两个列表列表,将结果存储在 Dataframe 中
【发布时间】:2023-03-31 23:17:01
【问题描述】:

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

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个list,AP有20个list,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 的建议,谢谢。

【问题讨论】:

    标签: python pandas dataframe series


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-07
      • 2021-12-04
      • 1970-01-01
      • 2020-04-26
      • 2020-08-05
      • 2021-07-02
      • 2015-12-01
      • 2015-08-24
      相关资源
      最近更新 更多