
本教程详细阐述了如何利用NumPy的`argsort`函数,实现一个Pandas DataFrame根据另一个DataFrame的列序进行关联排序。通过将第二个DataFrame转换为NumPy数组并获取其列排序索引,然后利用NumPy高级索引技术,高效地重新排列第一个DataFrame的列,确保两个DataFrame之间保持逻辑一致的列顺序。
在数据分析和处理中,我们经常会遇到需要根据一个数据集的某种度量标准,来重新排列另一个相关数据集的情况。例如,当我们有两个结构相同的Pandas DataFrame,一个存储实体(如单词),另一个存储这些实体对应的某种评分(如相似度分数)。此时,我们可能希望根据评分DataFrame中每行的分数高低,来同步调整实体DataFrame中对应行的列顺序,以保持数据的一致性和可读性。本文将深入探讨如何利用Pandas和NumPy的强大功能,高效且专业地解决这一问题。
假设我们有两个具有相同索引和列数的Pandas DataFrame:
我们的目标是根据df2中每行(即每个索引项)的评分进行列向(axis=1)排序,并将这个排序结果应用到df1上,使得df1的列顺序与df2排序后的列顺序保持一致。
以下是示例数据:
import pandas as pd
import numpy as np
# DataFrame #1 (实体数据,例如单词)
data_words = {
'Col 0': ['Rockets', 'Canvases', 'Infections'],
'Col 1': ['Cars', 'Paint', 'Dirt'],
'Col 2': ['Ships', 'Ink', 'Dust']
}
df1 = pd.DataFrame(data_words, index=['Trains', 'Paintings', 'Germs'])
print("原始 df1 (实体数据):")
print(df1)
# 输出:
# Col 0 Col 1 Col 2
# Trains Rockets Cars Ships
# Paintings Canvases Paint Ink
# Germs Infections Dirt Dust
# DataFrame #2 (相似度评分)
data_scores = {
'Col 0': [47, 22, 77],
'Col 1': [80, 90, 40],
'Col 2': [33, 30, 52]
}
df2 = pd.DataFrame(data_scores, index=['Trains', 'Paintings', 'Germs'])
print("\n原始 df2 (相似度评分):")
print(df2)
# 输出:
# Col 0 Col 1 Col 2
# Trains 47 80 33
# Paintings 22 90 30
# Germs 77 40 52我们期望df1根据df2的列序(例如,降序)进行调整。以Trains行为例:df2中[47, 80, 33]降序排列后,其原始索引顺序是[1, 0, 2](即80在Col 1,47在Col 0,33在Col 2)。因此,df1中Trains行对应的['Rockets', 'Cars', 'Ships']也应按此顺序变为['Cars', 'Rockets', 'Ships']。
解决此问题的关键在于利用NumPy的两个强大特性:
AdMaker AI
从0到爆款高转化AI广告生成器
65
查看详情
我们将通过以下步骤实现关联排序:
# 步骤1: 获取 df2 的列向排序索引
# 为了实现降序排序,我们对 -df2 进行 argsort。
# np.argsort 默认沿最后一个轴(对于二维数组是列)进行排序,返回排序后的元素在原始数组中的索引。
# np.argsort(-df2) 会返回一个与 df2 形状相同的二维数组,其中每个元素是该行排序后的列索引。
sort_indices = np.argsort(-df2.to_numpy(), axis=1)
print("\ndf2 降序排序后的列索引 (每行):")
print(sort_indices)
# 输出示例:
# [[1 0 2] # Trains行: Col 1(80) > Col 0(47) > Col 2(33)
# [1 2 0] # Paintings行: Col 1(90) > Col 2(30) > Col 0(22)
# [0 2 1]] # Germs行: Col 0(77) > Col 2(52) > Col 1(40)
# 步骤2: 应用索引重排 df1
# 首先将 df1 转换为 NumPy 数组
df1_np = df1.to_numpy()
# 构建行索引数组。np.arange(len(df1)) 生成 [0, 1, 2, ...]
# [:, None] 将其转换为列向量 [[0], [1], [2], ...]
# 这使得在高级索引时,每行都能独立地使用 sort_indices 中的对应行。
row_indices = np.arange(len(df1))[:, None]
# 使用高级索引进行重排
# df1_np[row_indices, sort_indices] 会根据 row_indices 和 sort_indices
# 逐行选择 df1_np 中的元素,从而实现列的重排。
# 最后,将重排后的 NumPy 数组赋值回 df1,使用 df1[:] 确保原地修改。
df1[:] = df1_np[row_indices, sort_indices]
print("\n排序后的 df1 (实体数据):")
print(df1)
# 期望输出:
# Col 0 Col 1 Col 2
# Trains Cars Rockets Ships
# Paintings Paint Ink Canvases
# Germs Infections Dust Dirtsort_indices = np.argsort(-df2.to_numpy(), axis=1)
row_indices = np.arange(len(df1))[:, None]
df1[:] = df1_np[row_indices, sort_indices]
本教程提供了一种高效且专业的解决方案,用于根据一个Pandas DataFrame的列序来关联排序另一个
DataFrame。通过巧妙地结合numpy.argsort获取排序索引和NumPy的高级索引功能,我们能够实现复杂的逐行列重排逻辑,同时保持代码的简洁性和执行效率。掌握这种技术,将有助于您在数据处理和分析工作中更灵活地处理关联数据集的排序需求。
以上就是基于NumPy索引实现Pandas DataFrame列序关联排序的专业指南的详细内容,更多请关注其它相关文章!
相关文章:
构建轻量级网站内部消息系统:Formspree 集成指南
J*aScript map 迭代中检测空数组元素的有效方法
Python大型XML文件高效流式解析教程
动漫岛观看全网网 动漫岛在线正版动漫入口
《燕云十六声》两周内达九百万玩家!位居畅销榜第五
红果短剧网页版官网入口 官方最新网址发布
学习通在线学习平台 学习通网页版直接进入课程中心
曝R星经典之作开发图 设计简陋但信息密集!
Typer应用中灵活处理命令行参数的令牌化与解析
怎么在浏览器上运行HTML文件_浏览器运行HTML文件技巧【技巧】
必由学官网首页入口 必由学教师网页版登录指南
俄罗斯浏览器官网直达链接 俄罗斯浏览器最新在线入口导航
QQ邮箱电脑版登录入口_QQ邮箱官方网站登录平台
b站如何看历史记录_b站观看历史找回方法
微信怎么把收藏的内容分类管理 微信收藏内容标签分类方法
Python vgamepad库按键模拟:正确使用XUSB_BUTTON常量
漫蛙Manwa2官网入口地址分享 漫蛙漫画PC版永久访问通道
JUnit5/Mockito:优雅测试内部依赖与异常处理的实践
使用PHP DOM解析器高效提取HTML中特定标题及其紧邻段落
网站内容防复制粘贴的实现策略与局限性
PHP中获取MongoDB服务器运行时间(Uptime)的专业指南
QQ邮箱官网登录入口 QQ邮箱网页版邮箱快速登录
Flexbox布局实践:实现粘性导航栏与底部固定页脚
优化大型XML文件解析:基于Python流式处理的内存高效方案
PHP中高效并行检查多链接状态的教程
C++如何比较两个字符串_C++ string compare函数与操作符对比
学习通网页版快速入口 学习通官网网页版直接打开
php源码怎么在电脑上测试_电脑测试php源码方法步骤【教程】
荣耀Play7T运行卡顿解决_荣耀Play7T性能优化
处理Kafka消息时会话超时与实现幂等性消费者
Lar*el Excel导入时生成自定义递增ID的策略与实践
俄罗斯搜索引擎Yandex指南 附2025年免登录官网入口
Win11怎么隐藏桌面图标 Win11一键隐藏所有桌面元素及恢复显示
CSS Box Model与弹性按钮:维持布局稳定的动画实践
在J*a中如何开发在线活动报名与管理系统_活动报名管理项目实战解析
在python-socketio事件处理器中安全访问Flask应用上下文
CSS子选择器:如何区分并样式化嵌套列表的子层级
微信网页版官方快速登录入口 微信网页版网页版账号直达
FullCalendar 自定义按钮样式定制指南
C++如何检测键盘输入_C++ _kbhit与_getch函数非阻塞输入
mc.js官网登录入口 mc.js官方登录入口最新版
uc浏览器网页版入口 uc浏览器网页版最新网址
在Runstone环境中高效处理TasteDive API的JSON数据
解决Python单元测试中Mock异常方法调用计数为零的问题
vivo手机互传视频怎么操作_vivo手机互传视频详细传输方法
QQ邮箱官方邮箱登录入口 QQ邮箱网页版快速访问
解决Rails应用中内容错位与Turbo警告:meta标签误用导致富文本渲染异常
zookeeper 都有哪些功能?
圆通快递查询实时追踪 圆通物流包裹状态快速查看
Shopware订单对象中获取产品自定义字段的正确方法