如何基于两个列表生成包含所有组合的DataFrame?
生成两个列表所有组合的DataFrame最优方法
针对你需要生成两个列表所有可能组合(笛卡尔积)的DataFrame需求,以下是几种高效的实现方案,适合大规模数据场景:
方法1:Pandas原生交叉合并(推荐)
Pandas 1.2.0及以上版本支持how='cross'参数,直接通过合并两个单列表DataFrame生成笛卡尔积,底层做了优化,处理大数量级数据效率很高。
import pandas as pd list1 = [1,2,3] list2 = [10,11,12] # 生成笛卡尔积DataFrame df = pd.DataFrame({'list1': list1}).merge(pd.DataFrame({'list2': list2}), how='cross')
方法2:利用itertools.product生成组合
itertools是Python标准库,product方法专门用于生成多个可迭代对象的笛卡尔积,返回迭代器,内存占用低,适合超大规模列表:
import pandas as pd from itertools import product list1 = [1,2,3] list2 = [10,11,12] # 生成所有组合的迭代器,再转为DataFrame combinations = product(list1, list2) df = pd.DataFrame(combinations, columns=['list1', 'list2'])
方法3:MultiIndex构建法
通过Pandas的多层索引生成笛卡尔积,再转为普通DataFrame,代码简洁直观:
import pandas as pd list1 = [1,2,3] list2 = [10,11,12] # 从笛卡尔积生成多层索引,再转为无索引的DataFrame df = pd.MultiIndex.from_product([list1, list2], names=['list1', 'list2']).to_frame(index=False)
注意
绝对不推荐手动嵌套循环生成组合,这种方法时间复杂度高,处理大规模数据时性能极差。
内容的提问来源于stack exchange,提问作者Heinrich__db
相关产品推荐
相关产品推荐

