如何实现两个列表的一对一映射并生成pandas DataFrame
实现两个列表笛卡尔积转DataFrame的方案
你原有代码无法得到预期结果的核心原因是:循环内直接对df["A"]、df["B"]赋值是直接覆盖整列的所有值,不会新增行,最终只会得到只有1行的错误结果。
以下是两种可直接运行的正确实现:
方法1:使用pandas内置方法实现(推荐)
利用pd.MultiIndex.from_product直接生成笛卡尔积,代码更简洁性能更好:
import pandas as pd a = [1,2,3] b = [1,2] # from_product参数顺序对应列的生成顺序,names参数指定列名 df = pd.MultiIndex.from_product([b, a], names=['colA', 'colB']).to_frame(index=False)
方法2:循环实现(适合理解逻辑)
先把两组值分别存到列表里,最后再统一转DataFrame:
import pandas as pd a = [1,2,3] b = [1,2] colA_list = [] colB_list = [] for val_b in b: for val_a in a: colA_list.append(val_b) colB_list.append(val_a) df = pd.DataFrame({ "colA": colA_list, "colB": colB_list })
两种方法输出的结果都和你要求的格式完全一致:
colA colB 0 1 1 1 1 2 2 1 3 3 2 1 4 2 2 5 2 3
内容的提问来源于stack exchange,提问作者Kushagra Sharma
相关产品推荐
相关产品推荐

