如何用单段代码实现两个集合的全交叉连接并转换为DataFrame?
实现两个集合的全交叉连接并转为DataFrame
可以用itertools.chain把两个方向的笛卡尔积结果合并,再一次性转为DataFrame,单段代码就能完成需求:
import itertools import pandas as pd a = {1,2,3} b = {4,5,6} # 合并双向交叉连接结果并转为DataFrame df = pd.DataFrame(itertools.chain(itertools.product(a, b), itertools.product(b, a)), columns=["元素A", "元素B"]) print(df)
补充说明:
itertools.product(a, b)生成a元素在前、b元素在后的所有组合,itertools.product(b, a)则生成反向的组合itertools.chain()直接串联两个迭代器的内容,比先转成列表再合并更节省内存- 通过
columns参数指定列名,能让DataFrame的结构更清晰
如果需要区分两种组合的方向,可以新增一列标记:
import itertools import pandas as pd a = {1,2,3} b = {4,5,6} # 生成带方向标记的组合数据并转为DataFrame df = pd.DataFrame( [(x, y, "a→b") for x, y in itertools.product(a, b)] + [(x, y, "b→a") for x, y in itertools.product(b, a)], columns=["元素1", "元素2", "组合方向"] ) print(df)
内容的提问来源于stack exchange,提问作者Nikita Menon
相关产品推荐
相关产品推荐

