Pandas实现单行数据拆分为8组唯一排列行的方法咨询
Pandas 单行数据拆分为全排列组合行实现方案
实现思路
- 逐行提取3枚硬币的两个可选面值,分别生成长度为2的列表
- 通过排列组合工具生成3个列表的所有8种笛卡尔积结果
- 保留每行的通用冗余字段,和每种组合拼接后展开为独立行
- 最终将所有展开数据重构为目标格式的DataFrame
完整代码
import pandas as pd from itertools import product # 构造示例源DataFrame,实际使用时替换为自己的数据源即可 df = pd.DataFrame([ ["1-Jan", "H", "T", "H", "T", "H", "T", "X", "Y"], ["2-Jan", "P", "Q", "P", "Q", "P", "Q", "A", "B"] ], columns=["Date", "Coin1_Face_1", "Coin1_Face_2", "Coin2_Face_1", "Coin2_Face_2", "Coin3_Face_1", "Coin3_Face_2", "Random1", "Random2"]) def row_expander(row): # 提取每枚硬币的两个可选值 coin1_values = [row["Coin1_Face_1"], row["Coin1_Face_2"]] coin2_values = [row["Coin2_Face_1"], row["Coin2_Face_2"]] coin3_values = [row["Coin3_Face_1"], row["Coin3_Face_2"]] # 生成所有排列组合 all_combinations = product(coin1_values, coin2_values, coin3_values) # 拼接通用字段返回当前行的所有展开结果 return [ [row["Date"], c1, c2, c3, row["Random1"], row["Random2"]] for c1, c2, c3 in all_combinations ] # 逐行处理后展开为一维列表,再构造最终DataFrame expanded_list = df.apply(row_expander, axis=1).explode().tolist() result_df = pd.DataFrame(expanded_list, columns=["Date", "Coin_1", "Coin_2", "Coin_3", "Random1", "Random2"]) # 打印验证结果 print(result_df)
注意事项
- 该方案默认3枚硬币每枚固定2个面值,刚好生成8种组合,符合需求场景
- 如果后续硬币数量或面值数量有调整,只需修改
row_expander函数中提取可选值的逻辑即可适配
内容的提问来源于stack exchange,提问作者phewww_
相关产品推荐
相关产品推荐

