新闻中心
将 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多列网格式拖动布局插件
网页中拖动 DIV 是很常见的操作,今天就分享给大家一个 jQuery 多列网格拖动布局插件,和其它的插件不太一样的地方在于你处理拖放的元素支持不同大小,并且支持多列的网格布局,它们会自动的根据位置自己排序和调整。非常适合你开发具有创意的应用。这个插件可以帮助你将任何的 HTML 元素转换为网格组件
75
查看详情
解决方案
以下代码展示了如何使用 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
代码解释
-
make_pairs 函数:
- 接收一个DataFrame和一个列名作为输入。
- 使用 df[col].apply(lambda x: [*combinations(iterable=x, r=2)]) 对指定列的每个列表应用 itertools.combinations 函数,生成所有两两组合。[*...] 用于立即解包迭代器。
- 使用 .explode() 将每个列表的组合展开为单独的行。
- 创建一个新的DataFrame,其中包含组合后的元素,并使用原始DataFrame的索引进行连接。
- 为新列添加后缀,例如 B_m1 和 B_m2。
-
主程序:
- 创建示例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站观看历史找回方法


2025-11-02
浏览次数:次
返回列表
make_pairs(df=df, col="B_n"),
],
)
# Drop the unneeded columns.
.drop(columns=["B_m", "B_n"])
)
print(out)