如何使用pandas基于姓名与编程语言列表生成两两组合的DataFrame
实现方案
你需要的是两个列表的笛卡尔积(全两两配对)效果,以下是3种可直接运行的实现方式:
方法1:pandas原生最简实现
直接用pandas内置的多级索引方法生成配对,代码最简洁:
import pandas as pd # 原始变量 name = ['John','Seen','Sam','Tom','Lisa'] language = ['python','java','C++','javascript'] # 生成全配对DataFrame df = pd.MultiIndex.from_product([name, language], names=['name', 'Language']).to_frame(index=False)
方法2:借助标准库itertools实现
逻辑更直观,适合对pandas接口不熟悉的场景:
import pandas as pd from itertools import product name = ['John','Seen','Sam','Tom','Lisa'] language = ['python','java','C++','javascript'] # 生成笛卡尔积后转为DataFrame df = pd.DataFrame(product(name, language), columns=['name', 'Language'])
方法3:通过merge关联实现
适合理解配对的底层逻辑:
import pandas as pd name = ['John','Seen','Sam','Tom','Lisa'] language = ['python','java','C++','javascript'] # 给两个列表构造相同的临时关联键,合并后删除临时键即可 df_name = pd.DataFrame({'name': name, 'tmp': 1}) df_lang = pd.DataFrame({'Language': language, 'tmp': 1}) df = pd.merge(df_name, df_lang, on='tmp').drop('tmp', axis=1)
以上3种方法输出结果完全一致,都是你需要的姓名+全量编程语言的配对格式,最终生成的DataFrame共20行(5个姓名 × 4种语言)。
内容的提问来源于stack exchange,提问作者xiao_mo_gu
相关产品推荐
相关产品推荐

