如何生成Pandas DataFrame各列唯一值的所有组合
生成Pandas各列唯一值的所有组合
问题描述
给定如下Pandas DataFrame:
A B C 0 1 2 3 1 4 5 6
需要生成包含各列自身唯一值所有组合的新DataFrame,覆盖所有可能的列值组合。
解决方案
通过提取各列唯一值并生成笛卡尔积的方式实现,具体步骤如下:
- 构造输入DataFrame
import pandas as pd df = pd.DataFrame({ 'A': [1, 4], 'B': [2, 5], 'C': [3, 6] })
- 生成各列唯一值的笛卡尔积
利用pd.MultiIndex.from_product生成所有组合,再转换为DataFrame:
# 提取每列的唯一值列表 unique_columns = [df[col].unique() for col in df.columns] # 生成笛卡尔积并转换为DataFrame result_df = pd.DataFrame( data=pd.MultiIndex.from_product(unique_columns, names=df.columns), columns=df.columns )
执行后得到的结果为:
A B C 0 1 2 3 1 1 2 6 2 1 5 3 3 1 5 6 4 4 2 3 5 4 2 6 6 4 5 3 7 4 5 6
- 调整结果排序(可选)
如果需要和示例完全一致的排序逻辑,可以对结果按B列、A列排序:
result_df = result_df.sort_values(by=['B', 'A'], ignore_index=True)
调整后输出:
A B C 0 1 2 3 1 4 2 3 2 1 2 6 3 4 2 6 4 1 5 3 5 4 5 3 6 1 5 6 7 4 5 6
内容的提问来源于stack exchange,提问作者Richard Dixon
相关产品推荐
相关产品推荐

