0

0

将 DataFrame 数组元素转换为新行

花韻仙語

花韻仙語

发布时间:2025-11-02 10:30:01

|

624人浏览过

|

来源于php中文网

原创

将 dataframe 数组元素转换为新行

本文旨在解决将DataFrame中包含数组的列转换为多行,每行包含数组元素组合的问题。通过使用`itertools.combinations`和`pandas`的`explode`方法,我们将展示如何有效地将DataFrame中的数组元素展开为新的行,并生成所需的组合。这对于数据重塑和分析非常有用,特别是在处理包含多个相关值的列表数据时。

在数据处理中,经常会遇到DataFrame的某一列包含列表(数组)的情况。有时,我们需要将这些列表中的元素展开,并与其他列的数据进行组合,生成新的行。本教程将介绍一种使用 itertools.combinations 结合 pandas 方法实现这一目标的方法。

问题描述

假设我们有一个DataFrame,其中包含一些列,例如 'Group', 'A_x', 'A_y',以及两个包含列表的列 'B_m' 和 'B_n'。我们的目标是将 'B_m' 和 'B_n' 列中的列表元素进行两两组合,并将每个组合作为新的行添加到DataFrame中。

例如,对于以下DataFrame:

import pandas as pd

df = pd.DataFrame(
    data=[
        [0, 4, 9, [8, 7, 3], [-10, 5, 2]],
        [0, 1, 2, [8, 7, 3], [-10, 5, 2]],
        [1, 3, 3, [1, 2], [-5, 1]],
    ],
    columns=['Group', 'A_x', 'A_y', 'B_m', 'B_n'],
)
print(df)

输出:

   Group  A_x  A_y        B_m          B_n
0      0    4    9  [8, 7, 3]  [-10, 5, 2]
1      0    1    2  [8, 7, 3]  [-10, 5, 2]
2      1    3    3     [1, 2]      [-5, 1]

我们希望将 'B_m' 列的 [8, 7, 3] 展开为 (8, 7), (8, 3), (7, 3),并将 'B_n' 列的 [-10, 5, 2] 展开为 (-10, 5), (-10, 2), (5, 2),然后将这些组合添加到新的行中。

Gridster.js多列网格式拖动布局插件
Gridster.js多列网格式拖动布局插件

网页中拖动 DIV 是很常见的操作,今天就分享给大家一个 jQuery 多列网格拖动布局插件,和其它的插件不太一样的地方在于你处理拖放的元素支持不同大小,并且支持多列的网格布局,它们会自动的根据位置自己排序和调整。非常适合你开发具有创意的应用。这个插件可以帮助你将任何的 HTML 元素转换为网格组件

下载

解决方案

以下代码展示了如何使用 itertools.combinations 和 pandas 方法来实现这一目标:

from itertools import combinations
import pandas as pd

def make_pairs(df: pd.DataFrame, col: str) -> pd.DataFrame:
    """
    将DataFrame中指定列的列表元素进行两两组合,并返回一个新的DataFrame。

    Args:
        df: 原始DataFrame。
        col: 需要进行组合的列名。

    Returns:
        一个新的DataFrame,包含组合后的元素。
    """
    pairs = (
        df[col]
        # Create 2-pair combinations of each list in the series 
        .apply(lambda x: [*combinations(iterable=x, r=2)])
        # Explode into a series of 2-item lists
        .explode()
    )
    # Construct a dataframe of the using the original index for joining
    return pd.DataFrame(
        data=pairs.to_list(),
        index=pairs.index,
        columns=[f"{col}{i}" for i in range(1, 3)]
    )


df = pd.DataFrame(
    data=[
        [0, 4, 9, [8, 7, 3], [-10, 5, 2]],
        [0, 1, 2, [8, 7, 3], [-10, 5, 2]],
        [1, 3, 3, [1, 2], [-5, 1]],
    ],
    columns=['Group', 'A_x', 'A_y', 'B_m', 'B_n'],
)
# Join everything together.
out = (
    df.join(
        other=[
            make_pairs(df=df, col="B_m"),
            make_pairs(df=df, col="B_n"),
        ],
    )
    # Drop the unneeded columns.
    .drop(columns=["B_m", "B_n"])
)
print(out)

输出:

   Group  A_x  A_y  B_m1  B_m2  B_n1  B_n2
0      0    4    9     8     7   -10     5
0      0    4    9     8     7   -10     2
0      0    4    9     8     7     5     2
0      0    4    9     8     3   -10     5
0      0    4    9     8     3   -10     2
0      0    4    9     8     3     5     2
0      0    4    9     7     3   -10     5
0      0    4    9     7     3   -10     2
0      0    4    9     7     3     5     2
1      0    1    2     8     7   -10     5
1      0    1    2     8     7   -10     2
1      0    1    2     8     7     5     2
1      0    1    2     8     3   -10     5
1      0    1    2     8     3   -10     2
1      0    1    2     8     3     5     2
1      0    1    2     7     3   -10     5
1      0    1    2     7     3   -10     2
1      0    1    2     7     3     5     2
2      1    3    3     1     2    -5     1

代码解释

  1. make_pairs 函数:

    • 接收一个DataFrame和一个列名作为输入。
    • 使用 df[col].apply(lambda x: [*combinations(iterable=x, r=2)]) 对指定列的每个列表应用 itertools.combinations 函数,生成所有两两组合。[*...] 用于立即解包迭代器。
    • 使用 .explode() 将每个列表的组合展开为单独的行。
    • 创建一个新的DataFrame,其中包含组合后的元素,并使用原始DataFrame的索引进行连接。
    • 为新列添加后缀,例如 B_m1 和 B_m2。
  2. 主程序:

    • 创建示例DataFrame。
    • 调用 make_pairs 函数处理 'B_m' 和 'B_n' 列,生成包含组合的新DataFrame。
    • 使用 df.join 将原始DataFrame与新DataFrame连接起来。
    • 使用 .drop 删除原始的 'B_m' 和 'B_n' 列。

总结

本教程展示了如何使用 itertools.combinations 结合 pandas 方法,将DataFrame中包含数组的列转换为多行,每行包含数组元素组合。这种方法对于数据重塑和分析非常有用,特别是在处理包含多个相关值的列表数据时。通过自定义函数和灵活运用 pandas 的 apply、explode 和 join 方法,可以高效地完成复杂的数据转换任务。

注意事项

  • 确保理解 itertools.combinations 函数的用法,特别是 r 参数,它决定了组合中元素的数量。
  • .explode() 方法会将列表中的每个元素展开为单独的行,因此在使用前请确保了解其行为。
  • 在连接DataFrame时,确保使用正确的索引,以避免数据错位。
  • 根据实际需求,可以修改列名的命名方式,例如添加不同的后缀或前缀。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

56

2025.12.04

lambda表达式
lambda表达式

Lambda表达式是一种匿名函数的简洁表示方式,它可以在需要函数作为参数的地方使用,并提供了一种更简洁、更灵活的编码方式,其语法为“lambda 参数列表: 表达式”,参数列表是函数的参数,可以包含一个或多个参数,用逗号分隔,表达式是函数的执行体,用于定义函数的具体操作。本专题为大家提供lambda表达式相关的文章、下载、课程内容,供大家免费下载体验。

206

2023.09.15

python lambda函数
python lambda函数

本专题整合了python lambda函数用法详解,阅读专题下面的文章了解更多详细内容。

191

2025.11.08

Python lambda详解
Python lambda详解

本专题整合了Python lambda函数相关教程,阅读下面的文章了解更多详细内容。

50

2026.01.05

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

25

2026.01.26

edge浏览器怎样设置主页 edge浏览器自定义设置教程
edge浏览器怎样设置主页 edge浏览器自定义设置教程

在Edge浏览器中设置主页,请依次点击右上角“...”图标 > 设置 > 开始、主页和新建标签页。在“Microsoft Edge 启动时”选择“打开以下页面”,点击“添加新页面”并输入网址。若要使用主页按钮,需在“外观”设置中开启“显示主页按钮”并设定网址。

6

2026.01.26

苹果官方查询网站 苹果手机正品激活查询入口
苹果官方查询网站 苹果手机正品激活查询入口

苹果官方查询网站主要通过 checkcoverage.apple.com/cn/zh/ 进行,可用于查询序列号(SN)对应的保修状态、激活日期及技术支持服务。此外,查找丢失设备请使用 iCloud.com/find,购买信息与物流可访问 Apple (中国大陆) 订单状态页面。

25

2026.01.26

npd人格什么意思 npd人格有什么特征
npd人格什么意思 npd人格有什么特征

NPD(Narcissistic Personality Disorder)即自恋型人格障碍,是一种心理健康问题,特点是极度夸大自我重要性、需要过度赞美与关注,同时极度缺乏共情能力,背后常掩藏着低自尊和不安全感,影响人际关系、工作和生活,通常在青少年时期开始显现,需由专业人士诊断。

3

2026.01.26

windows安全中心怎么关闭 windows安全中心怎么执行操作
windows安全中心怎么关闭 windows安全中心怎么执行操作

关闭Windows安全中心(Windows Defender)可通过系统设置暂时关闭,或使用组策略/注册表永久关闭。最简单的方法是:进入设置 > 隐私和安全性 > Windows安全中心 > 病毒和威胁防护 > 管理设置,将实时保护等选项关闭。

5

2026.01.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Java 教程
Java 教程

共578课时 | 51.4万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号