新闻中心

将 DataFrame 数组元素转换为新行

2025-11-02
浏览次数:
返回列表

将 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多列网格式拖动布局插件 75 查看详情 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优化厂家  # app  # 这一目标  # 如何用  # 如何使用  # 并将  # 多个  # 是在  # 转换为  # 拖动  # 自定义  # ai 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 虫虫漫画精品漫画官网_虫虫漫画精品漫画官网进入精品漫画  学习通网页版官方登录 超星学习通电脑端入口指南  LINUX的I/O重定向是什么_深入理解LINUX中 >、>> 与 < 的区别  Python类型检查:优化关联可选属性的Mypy推断策略  俄罗斯浏览器官网直达链接 俄罗斯浏览器最新在线入口导航  浏览器打开即用 美图秀秀网页版入口  利用Bokeh CustomJS动态控制DataTable列可见性  如何在网页中实现特定地点的随机图片展示  顺丰快件物流信息 官方网站查询入口  如何优雅地扩展SprykerGlue后端API授权逻辑,使用spryker/glue-backend-api-application-authorization-connector-extension  如何在 Excel Online 和 Google 表格中更改日期格式  在J*a中如何开发简易电子商务商品管理系统_商品管理系统项目实战解析  Mac怎么查看崩溃日志_Mac控制台错误报告分析  地铁跑酷免费秒玩入口链接 地铁跑酷小游戏免费秒玩网站  Python实现多节点属性重叠度分析教程  魅族20怎样在浏览器开无图省流_iPhone魅族20浏览器开无图省流【流量节省】  4399免费游戏网址入口 4399小游戏免费入口点开即玩  Go RPC HTTP服务正确实现与常见陷阱解析  多闪网页版在线观看免费入口_多闪官网访问入口  126邮箱手机版登录官网2026_126手机邮箱免费入口最新  css卡片内容溢出如何处理_使用overflow隐藏或scroll显示内容  Lar*el如何正确地在控制器和模型之间分配逻辑_Lar*el代码职责分离与架构建议  Win11网速慢怎么解决 Win11网络设置优化解除限速  消息称三星明年 2 月正式发布 HBM4,与 SK 海力士同台竞技  J*aScript中高效管理与清空动态列表:避免循环陷阱  修复二维数组索引越界异常:一维循环到二维坐标的正确映射  qq浏览器如何查看和导出已保存的密码 qq浏览器密码管理器数据备份教程  yandex入口引擎手机版 yandex安卓版下载入口  Win10文件资源管理器“此电脑”分组怎么关 Win10恢复经典视图【技巧】  qq游戏网页版直接玩_qq游戏免下载快速入口  解决 Vaadin 8 中大文件音频播放与定位时出现的 IOException  优化HTML表单样式:解决输入框焦点跳动与元素间距问题  QQ邮箱登录首页官网地址2026 QQ邮箱官方网页入口  Lar*el 8 多关键词数据库搜索优化实践  AO3最新官网入口公告_2025AO3镜像站实时查询方法  网站内容防复制粘贴的实现策略与局限性  夸克浏览器桌面版同步不了书签怎么处理 夸克浏览器跨设备同步异常解决方案  excel怎么制作工资条 excel快速生成工资条的方法  windows10怎么关闭系统提示音_windows10彻底静音设置方法  解决J*aScript中重复选择项的确认对话框显示问题  如何使用spryker/configurable-bundles-products-resource-relationship模块解决复杂产品捆绑关系难题  淘宝网网页版登录入口 淘宝官方网页版快捷登录  HuggingFaceEmbeddings中向量嵌入维度调整的限制与理解  解决移动端滚动问题的overflow属性应用指南  AO3网页版合集入口 Archive of Our Own同人作品浏览指南  AO3中文官网链接_AO3网页版稳定镜像站  冬*霸灯泡不亮怎么办_浴霸取暖灯一盏不亮的灯座清洁修复法  AO3官方可用镜像 Archive of Our Own网页版最新入口  动漫共和国防屏蔽稳定域名-动漫共和国官方正版直达通道  b站如何看历史记录_b站观看历史找回方法 

搜索