将 DataFrame 数组元素转换为新行


将 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 元素转换为网格组件

Gridster.js多列网格式拖动布局插件 74 查看详情 Gridster.js多列网格式拖动布局插件

解决方案

以下代码展示了如何使用 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时,确保使用正确的索引,以避免数据错位。
  • 根据实际需求,可以修改列名的命名方式,例如添加不同的后缀或前缀。

以上就是将 DataFrame 数组元素转换为新行的详细内容,更多请关注其它相关文章!


# 这一目标  # 泰安网站建设的策划方案  # 电商网站数据优化  # 贵阳网站建设专业  # seo标题和描述  # SEO是什么是碳水食物  # 测评网站建设文案范文  # 莆田网站建设与运营公司  # 西藏seo服务软件  # seo优化培训班运营  # 协会网站建设服务热线  # app  # 如何用  # 如何使用  # 镜像  # 并将  # 多个  # 是在  # 自定义  # 转换为  # 拖动  # ai 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894 】


相关推荐: 获取WooCommerce产品在后台编辑页面的分类ID  J*a列表元素格式化输出教程  视频号视频怎么提取文案?提取的文案如何优化与使用?  《兴业银行》注册登录方法  《procreate》绘制渐变效果教程  Golang如何使用gRPC拦截器实现日志收集_Golang gRPC拦截器日志收集实践  windows10怎么开启卓越性能_windows10电源选项代码激活  《宝可梦大集结》S4冠军之路开始时间介绍  知乎APP怎么查看自己被邀请的问题_知乎APP邀请回答记录查看与参与方法  TikTok视频播放中断怎么办 TikTok播放异常修复方法  Python测试中模块导入路径解析的最佳实践  C++ switch case字符串_C++如何实现字符串switch匹配  CodeIgniter 3 连接 SQL Server:正确获取查询结果的教程  如何在mysql中设计餐饮点餐系统_mysql点餐系统项目实战  盲鳗善于分泌黏液猜猜主要用来做什么  在Flask应用中安全高效地更新SQLAlchemy用户数据  研招网官方网站招生平台入口_中国研究生招生信息网官网登录  Lar*el 关联查询:同时筛选父表与子表数据的高效策略  《火影忍者:木叶高手》快速升级攻略  Highcharts雷达图轴线交点数值标注指南  消除网页顶部意外空白线:CSS布局常见问题与解决方案  《猎聘》筛选猎头岗位方法  如何在CSS中清除浮动解决背景颜色不包裹内容问题_clear after技巧  win11关机几秒又自己开机 Win11关机自动重启问题修复  个人所得税办理入口 个人所得税综合所得年度汇算入口  怎么恢复删除的电脑文件_数据恢复软件使用教程  《360浏览器》设置摄像头权限方法  mysql如何管理数据库账户_mysql数据库账户管理技巧  qq邮箱格式填写示例 qq邮箱标准填写规范  CSS过渡与滚动滚动事件结合应用_scroll与transition动画  毒蘑菇VOLUMESHADER_BM官网首页登录入口 毒蘑菇VOLUMESHADER_BM官网首页登录入口说明  PHP中获取HTTP响应状态消息:方法与限制  如何查询个人病历记录  php如何实现多域名共享session_php存储session到redis与跨域读取配置  青橙手机语音助手怎么唤醒_青橙手机语音助手设置与唤醒方法  行者app怎样导出日志  《战地6》反作弊已成功拦截240万次作弊 发售第一周98%比赛没有作弊  Excel怎么用XLOOKUP函数实现双向查找_ExcelXLOOKUP替代VLOOKUP+HLOOKUP的高级用法  在J*a中如何实现在线问答与评分系统_问答评分项目开发方法说明  word怎么将图片设置为页面背景并不影响打印_Word图片背景设置方法  微星主板BIOS怎么调整内存时序_内存参数手动优化BIOS设置教程  从HTML表单获取逗号分隔值并转换为NumPy数组进行预测  抖音视频如何添加标题?添加标题有哪些好处?  《顺丰同城骑士》查看我的技能方法  晨报|开发商暗示《空洞骑士:丝之歌》DLC开发中 《合金装备4》有望重制  深入理解随机递归函数的确定性:内部节点、叶节点与时间复杂度分析  Python高效统计字典嵌套列表值在目标列表中的出现次数  Lar*el怎么实现全文搜索_Lar*el Scout集成Algolia教程  我的世界游戏平台入口 我的世界官方官网直达链接  DeepSeek超全面指南:入门必看 

 2025-11-02

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.