You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 12:36:00