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

如何将DataFrame分组列中的值对拆分为多列?

解决Pandas分组生成无重复元素对并拆分列的问题

问题说明

需要对Pandas DataFrame按Group列分组,针对指定列(如B_m、B_n)生成无重复的两两元素对(逻辑与itertools.combinations(col, r=2)一致),并拆分为新列B_m1、B_m2、B_n1、B_n2;同时移除仅含1行的分组,分组含4行及以上时同样生成所有无重复组合。

原始DataFrame:

import pandas as pd
from itertools import combinations

df = pd.DataFrame(
    data=[
        [0, 4, 7, -1, 0.9],
        [0, 4, 7, 0, 0.3],
        [0, 4, 7, 1, 0.2],
        [1, 3, 3, 1, 0.5],
        [1, 3, 3, 0, 0.2],
        [2, 1, 8, 0, 0.6],
    ],
    columns=['Group', 'A_x', 'A_y', 'B_m', 'B_n'],
)

解决方案

利用groupby结合自定义函数,配合itertools.combinations实现高效处理,避免低效循环:

def process_group(g):
    # 跳过行数不足2的分组
    if len(g) < 2:
        return pd.DataFrame()
    
    # 提取分组内固定的列值(同一Group的A_x、A_y值一致)
    group_base = g[['Group', 'A_x', 'A_y']].iloc[0].to_dict()
    
    # 生成目标列的两两无重复组合
    b_m_pairs = list(combinations(g['B_m'], r=2))
    b_n_pairs = list(combinations(g['B_n'], r=2))
    
    # 构造结果DataFrame
    result_df = pd.DataFrame({
        'B_m1': [pair[0] for pair in b_m_pairs],
        'B_m2': [pair[1] for pair in b_m_pairs],
        'B_n1': [pair[0] for pair in b_n_pairs],
        'B_n2': [pair[1] for pair in b_n_pairs]
    })
    
    # 添加分组固定信息
    for col, val in group_base.items():
        result_df[col] = val
    
    # 调整列顺序匹配预期格式
    return result_df[['Group', 'A_x', 'A_y', 'B_m1', 'B_m2', 'B_n1', 'B_n2']]

# 按Group分组处理并合并结果
final_output = df.groupby('Group').apply(process_group).reset_index(drop=True)
print(final_output)

输出结果

运行后得到的结果与预期完全一致:

Group  A_x  A_y  B_m1  B_m2  B_n1  B_n2
0      0    4    7    -1     0   0.9   0.3
1      0    4    7    -1     1   0.9   0.2
2      0    4    7     0     1   0.3   0.2
3      1    3    3     1     0   0.5   0.2

代码说明

  • process_group函数:负责单个分组的处理,先过滤行数不足2的无效分组;提取同一分组内固定的Group、A_x、A_y值;对目标列生成两两组合,最后构造并返回符合格式的结果DataFrame。
  • groupby.apply:将自定义函数批量应用到每个分组,自动合并所有有效分组的结果。
  • reset_index(drop=True):清理分组后产生的多级索引,得到结构整洁的最终结果。

这种方法依托Pandas的分组机制和itertools的高效组合生成能力,代码简洁且性能远优于手动循环。

内容的提问来源于stack exchange,提问作者Gozmit97

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 20:25:07