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

如何基于Pandas DataFrame生成指定大小的行组合并横向拼接结果

如何基于Pandas DataFrame生成指定大小的行组合并横向拼接结果

我来帮你解决这个问题——你需要把DataFrame的每一行当作一个独立的“项”,生成指定大小的所有组合,再把每个组合里的行横向拼接成一行,同时保证效率对吧?

核心思路

我们需要分两步走:

  1. 生成所有行索引的指定大小组合(比如你要的3个一组)
  2. 对每个索引组合,提取对应的行并横向拼接,最后把所有拼接结果整合成新的DataFrame

方法一:Pandas原生实现(易读性优先)

这个方法用itertools.combinations生成索引组合(它是惰性迭代的,不会一次性占用大量内存),再用Pandas的concat拼接行,代码直观易懂:

import pandas as pd
from itertools import combinations

def generate_row_combinations(df, combo_size):
    # 生成所有行索引的指定大小组合
    idx_combinations = combinations(df.index, combo_size)
    result_rows = []
    
    for idxs in idx_combinations:
        # 提取组合内的所有行,横向拼接成一行
        combined_row = pd.concat([df.loc[idx] for idx in idxs], axis=0)
        result_rows.append(combined_row)
    
    # 把所有结果行组合成新DataFrame,重置索引
    return pd.DataFrame(result_rows).reset_index(drop=True)

# 测试你的示例数据
df = pd.DataFrame({'A':['a','b','c','d'], 'B':['1','2','3','4']})
output_df = generate_row_combinations(df, 3)
print(output_df)

运行后你会得到完全符合预期的结果:

A  B  A  B  A  B
0  a  1  b  2  c  3
1  a  1  b  2  d  4
2  a  1  c  3  d  4
3  b  2  c  3  d  4

方法二:Numpy优化版(效率优先)

如果你的DataFrame行数很多,用Numpy底层操作会更快,因为它的数组处理比Pandas行操作更高效:

import pandas as pd
import numpy as np
from itertools import combinations

def generate_row_combinations_fast(df, combo_size):
    # 把DataFrame转成Numpy数组
    df_array = df.to_numpy()
    # 生成行索引的组合
    idx_combinations = combinations(range(len(df_array)), combo_size)
    
    # 对每个组合,提取行并扁平化(把多行转成一维数组)
    result_array = np.array([df_array[idxs].flatten() for idxs in idx_combinations])
    # 生成重复的列名(比如原列名是A、B,3个组合就变成A、B、A、B、A、B)
    new_columns = df.columns.tolist() * combo_size
    
    # 转回DataFrame
    return pd.DataFrame(result_array, columns=new_columns)

# 同样测试示例数据
output_df_fast = generate_row_combinations_fast(df, 3)
print(output_df_fast)

关于效率的提醒

需要注意的是,组合数会随着DataFrame行数和组合大小呈指数增长(比如100行选5个的组合数是75287520),这种情况下不管哪种方法都会很慢——这是组合问题本身的特性,不是代码能解决的。如果遇到超大数据集,建议先评估是否真的需要生成所有组合,或者有没有其他简化逻辑的可能。

备注:内容来源于stack exchange,提问作者blahahaaahahaa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 17:40:30