利用Pandas和NumPy高效从索引映射生成坐标DataFrame

利用Pandas和NumPy高效从索引映射生成坐标DataFrame

本文详细介绍了如何根据一个索引列表,从现有pandas dataframe中高效提取对应的x、y坐标,并构建一个新的dataframe。文章首先探讨了基于循环和字典的初步实现方式及其改进,随后重点展示了利用numpy进行矢量化操作的优化方案,该方案显著提升了数据处理性能,为后续的数据可视化和分析奠定了坚实基础。

从索引映射构建坐标DataFrame教程

在数据处理和分析中,我们经常需要根据特定的映射规则从一个数据集中提取信息并重构为新的数据结构。本教程将聚焦于一个常见场景:给定一个包含索引对的列表和一个包含坐标信息的Pandas DataFrame,目标是创建一个新的DataFrame,其中每一行代表一个由索引对指向的X、Y坐标。

1. 问题描述与原始数据

假设我们拥有以下两组数据:

tours: 一个列表的列表(list of lists),其中每个子列表包含两个整数。第一个整数代表原始DataFrame中X坐标的行索引,第二个整数代表Y坐标的行索引。df: 一个Pandas DataFrame,包含多列数据,其中包括 Node、X、Y、Demand 和 Profit。

我们的任务是创建一个名为 coord 的新DataFrame,它只有 X 和 Y 两列。coord 的每一行都应根据 tours 中的索引对,从 df 中查找对应的X和Y值。

示例原始数据:

import pandas as pdimport numpy as nptours = [[0, 4], [0, 5], [0, 6], [1, 13], [2, 0], [3, 8], [4, 9], [5, 10],         [6, 7], [7, 1], [8, 2], [9, 3], [10, 11], [11, 14], [12, 0], [13, 12], [14, 0]]data = {    'Node': [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],    'X': [5.7735, 2.8867, -2.8868, -5.7735, -2.8867, 2.8868, 8.6603, 0.0000, -8.6603, -8.6603, 0.0000, 8.6603, 5.3405, 3.3198, 6.4952],    'Y': [0.00, 5.00, 5.00, 0.00, -5.00, -5.00, 5.00, 10.00, 5.00, -5.00, -10.00, -5.00, 0.75, 4.25, -1.25],    'Demand': [40.0, 40.0, 40.0, 40.0, 40.0, 40.0, 40.0, 40.0, 40.0, 40.0, 40.0, 40.0, 10.0, 10.0, 10.0],    'Profit': [16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 24.0, 24.0, 24.0, 24.0, 24.0, 10.0, 10.0, 11.0]}df = pd.DataFrame(data, index=range(len(data['Node']))) # 确保df的索引从0开始,与tours中的索引匹配

理解 tours 的含义:tours 中的 [0, 4] 表示:

X坐标取自 df.iloc[0][‘X’]Y坐标取自 df.iloc[4][‘Y’]

2. 方法一:基于循环和字典的构建

一种直观的方法是遍历 tours 列表,在每次迭代中根据索引从 df 中提取X和Y值,并将它们存储在一个字典中,最后将字典转换为DataFrame。

2.1 初步尝试与问题

最初的尝试可能如下:

d = {}for t, tour in enumerate(tours):    xi = tour[0]    yi = tour[1]    key = t    d[key] = df["X"].iloc[xi], df["Y"].iloc[yi]# 尝试直接使用pd.DataFrame(d.items(), columns=['X', 'Y'])# 这将导致错误或不符合预期的结果,因为d.items()会把键作为第一列,值(元组)作为第二列

这种方法在将字典 d 转换为DataFrame时会遇到问题。pd.DataFrame(d.items(), columns=[‘X’, ‘Y’]) 会将字典的键作为第一列(在这里是索引 0, 1, 2…),而将值(一个包含X和Y的元组)作为第二列。这并不是我们期望的两列 X 和 Y。

2.2 改进后的字典方法

为了正确地将字典转换为DataFrame,其中字典的键作为DataFrame的索引,而字典的值(元组)拆分为多列,我们需要使用 pd.DataFrame.from_dict() 方法,并设置 orient=’index’ 参数。

d = {}for t, tour in enumerate(tours):    xi = tour[0] # 获取X坐标的索引    yi = tour[1] # 获取Y坐标的索引    # 根据索引从df中查找对应的X和Y值    x_val = df["X"].iloc[xi]    y_val = df["Y"].iloc[yi]    d[t] = (x_val, y_val) # 将(X, Y)元组作为字典的值# 使用from_dict并指定orient='index'来正确构建DataFramecoord_loop = pd.DataFrame.from_dict(d, orient='index', columns=['X', 'Y'])print("方法一(循环+字典)结果:")print(coord_loop.head())

优点:

西语写作助手 西语写作助手

西语助手旗下的AI智能写作平台,支持西语语法纠错润色、论文批改写作

西语写作助手 19 查看详情 西语写作助手 逻辑清晰,易于理解,适合初学者。在数据量较小的情况下表现尚可。

缺点:

使用Python循环遍历Pandas Series,效率较低,尤其是在处理大型数据集时。需要额外创建字典作为中间数据结构。

3. 方法二:利用NumPy进行矢量化优化 (推荐)

对于Pandas和NumPy而言,矢量化操作通常比Python循环具有更高的性能。我们可以将 tours 转换为NumPy数组,并将 df 中的X、Y列提取为NumPy数组,然后利用NumPy的高级索引功能一步到位地获取所有坐标。

3.1 核心思想

将 tours 转换为NumPy数组,这样可以方便地通过 tours[:, 0] 获取所有X索引,通过 tours[:, 1] 获取所有Y索引。将 df 的 X 和 Y 列提取为一个NumPy数组,这样可以方便地通过索引直接访问这些值。利用NumPy的广播和高级索引特性,一次性从 df 的X、Y数组中提取所有需要的坐标。

3.2 实现步骤

# 1. 将tours列表转换为NumPy数组tours_np = np.array(tours)# 2. 从df中提取X和Y列,并转换为NumPy数组# 这样arr[index, 0] 对应X值,arr[index, 1] 对应Y值df_coords_np = df[["X", "Y"]].to_numpy()# 3. 使用高级索引一次性获取所有X和Y坐标# tours_np[:, 0] 提供了所有X坐标的索引# tours_np[:, 1] 提供了所有Y坐标的索引extracted_x = df_coords_np[tours_np[:, 0], 0] # 获取所有X坐标extracted_y = df_coords_np[tours_np[:, 1], 1] # 获取所有Y坐标# 4. 构建最终的DataFramecoord_vectorized = pd.DataFrame({"X": extracted_x, "Y": extracted_y})print("n方法二(NumPy矢量化)结果:")print(coord_vectorized.head())

代码解释:

tours_np = np.array(tours): 将 tours 转换为一个 (n, 2) 形状的NumPy数组。df_coords_np = df[[“X”, “Y”]].to_numpy(): 从 df 中选择 X 和 Y 列,并将其转换为一个NumPy数组。这个数组的行索引与原始 df 的行索引一致,第一列是 X 值,第二列是 Y 值。tours_np[:, 0]:这会选择 tours_np 数组的所有行,并获取每行的第一个元素(即X坐标的索引)。tours_np[:, 1]:这会选择 tours_np 数组的所有行,并获取每行的第二个元素(即Y坐标的索引)。df_coords_np[tours_np[:, 0], 0]: 这是一个高级索引操作。它使用 tours_np[:, 0] 作为行索引,从 df_coords_np 中选择对应的行,然后从这些行中选择第0列(即X坐标)。df_coords_np[tours_np[:, 1], 1]: 同样,它使用 tours_np[:, 1] 作为行索引,从 df_coords_np 中选择对应的行,然后从这些行中选择第1列(即Y坐标)。pd.DataFrame({“X”: extracted_x, “Y”: extracted_y}): 最后,将提取出的X和Y数组构建成一个新的Pandas DataFrame。

优点:

高性能: NumPy的矢量化操作在底层使用C语言实现,效率远高于Python循环。代码简洁: 相比于循环,矢量化代码通常更简洁、更易读(对于熟悉NumPy的用户)。内存效率: 减少了中间数据结构的创建。

4. 性能对比与最佳实践

在处理中小型数据集时,两种方法可能在执行时间上差异不大。然而,当 tours 列表包含成千上万甚至数百万个元素时,NumPy的矢量化方法将展现出压倒性的性能优势。

最佳实践建议:

优先使用矢量化操作: 在Pandas和NumPy中,只要有可能,就应优先考虑使用矢量化操作来代替显式的Python循环。理解数据结构: 在进行复杂索引和数据提取时,清晰地理解原始数据(df)和索引数据(tours)的结构是至关重要的。验证结果: 无论采用哪种方法,都应在小规模数据集上验证输出结果的正确性。

5. 总结与展望

本教程展示了两种从索引映射构建坐标DataFrame的方法。虽然基于循环和字典的方法直观易懂,但利用NumPy进行矢量化处理是更高效、更专业的解决方案,尤其适用于大规模数据处理。

最终生成的 coord DataFrame(无论是通过方法一的改进版还是方法二)都包含了我们需要的X和Y坐标对。这个DataFrame可以直接用于后续的数据可视化任务,例如使用Matplotlib、Seaborn或Plotly等库绘制路径或散点图。例如,要绘制路径,可以直接使用 coord[‘X’] 和 coord[‘Y’] 作为绘图函数的输入。

# 示例:使用matplotlib绘制路径(需要安装matplotlib)# import matplotlib.pyplot as plt# plt.figure(figsize=(10, 8))# plt.plot(coord_vectorized['X'], coord_vectorized['Y'], marker='o', linestyle='-', color='blue')# plt.title('Generated Route Coordinates')# plt.xlabel('X Coordinate')# plt.ylabel('Y Coordinate')# plt.grid(True)# plt.show()

掌握这种高效的数据提取和重构技术,将极大地提升您在Python数据科学项目中的工作效率。

以上就是利用Pandas和NumPy高效从索引映射生成坐标DataFrame的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/912501.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月29日 03:06:16
下一篇 2025年11月29日 03:10:36

相关推荐

  • 币圈爆仓后如何减少损失?币圈爆仓后的挽救方法

    Binance币安 欧易OKX ️ Huobi火币️ 币圈爆仓后想减少损失,关键不是立刻想着翻 本,而是先冷静下来,控制住局面。很多人在爆仓后情绪失控,急着加码一把赚回来,结果只会亏得更惨。真正有效的办法是调整心态、重新规划策略,并严格执行风控,避免二次伤害。 立即止损,防止亏损扩大 爆仓本身就是一…

    2025年12月9日
    100
  • 一文详细了解以太坊(ETH)的顶点会是多少?

    目录 关键指标分析与价格目标200 周移动平均线以太坊价格与已实现价格比率MVRV Z 值以太坊与比特币市值比以太坊与纳斯达克指数比总结 Tom Lee 在前不久的韩国区块链周上提出,以太坊的中期目标价为 6 万美元,并表示以太坊正处于一个为期 10-15 年的超级周期中。 如果他的判断正确,这一超…

    2025年12月9日 好文分享
    000
  • 比特币技术原理

    比特币,这个诞生于2008年匿名白皮书的数字货币,彻底改变了我们对货币和金融系统的认知。 它不仅仅是一种可以交易的资产,更是一个建立在精妙技术原理之上的去中心化系统。理解比特币的技术原理,如同拆解一台精密仪器,需要深入探讨其背后的密码学、分布式账本、共识机制等核心组件。这篇文章将带您深入剖析比特币的…

    好文分享 2025年12月9日
    000
  • 尽管近期出现回调,一文了解瑞波币(XRP)仍形成“最强看涨形态”,目标价指向6美元

    目录 要点介绍:分析师称XRP呈现“最强看涨结构”高位清算集中于2.90美元以上区域 周四,XRP价格稳定在2.80美元上方,增强了该代币向杯柄形态目标价6美元以上攀升的可能性。 要点介绍: 周四XRP报2.82美元,若成功突破杯柄形态,潜在涨幅达120%,目标指向6.20美元。XRP/USD需将3…

    2025年12月9日 好文分享
    000
  • 索拉纳币(Solana)价格预测:全球最大衍生品交易所盯上SOL$1,000 只是起点!

    全球最大的金融衍生品交易所 CME Group 即将正式引入 Solana(SOL),计划推出 24/7 全天候期货与期权产品,这一重磅消息迅速引爆市场看涨情绪,为 Solana 的价格前景注入强劲动能。 据官方披露,CME 将把其加密衍生品业务从比特币和以太坊拓展至主流山寨币领域,而 Solana…

    2025年12月9日
    000
  • 比特币交易策略

    加密货币市场,尤其是比特币,以其波动性和巨大的潜在回报吸引着全球投资者。然而,这种高回报往往伴随着高风险。成功的比特币交易并非简单的买入卖出,它需要一套经过深思熟虑、行之有效的策略。这不仅仅是关于预测价格走势,更关乎风险管理、资金分配以及情绪控制。本篇文章将深入探讨多种比特币交易策略,从基础的趋势跟…

    好文分享 2025年12月9日
    000
  • 一文搞清楚比特币(BTC)价格是否在10.8万美元触底?三大迹象表明最糟糕时期已经过去

    周二,比特币价格小幅走高,报113,900美元,多个链上指标和图表形态显示,市场可能已在近期低点附近筑底。 核心要点: 实体调整后的休眠流动性指标跌破25万,进入历史性的优质买入区域。 短期持有者的NUPL指标转为负值,表明抛售动能减弱,卖方力量接近枯竭。 技术图形呈现V型反转与双底结构,暗示后续可…

    2025年12月9日 好文分享
    000
  • 2025年BTC价格预测:技术指标与市场动态深度解析

    BTC当前价格走势分析 截至2025年9月26日,比特币价格报109,394.95美元,过去24小时内下跌1.92%。从技术层面观察,BTCC首席分析师William表示:「MACD指标目前处于-529.90的卖出区域,短期内或面临回调压力。」当前关键支撑位于109,219.21美元附近,若该位置能…

    2025年12月9日
    000
  • 币圈热门查看行情软件app 2025币圈行情分析软件排行榜

    Binance币安 欧易OKX ️ Huobi火币️ 2025年,币圈用户在选择行情分析软件时,更看重数据的全面性、实时性和分析工具的专业度。市场上既有专注于行情展示的第三方平台,也有集交易与分析于一体的综合App。以下几款应用因其稳定表现和良好口碑,成为当前主流选择。 CoinMarketCap:…

    2025年12月9日
    000
  • 币圈热门查看行情软件app 2025币圈行情分析软件排行

    Binance币安 欧易OKX ️ Huobi火币️ 2025年,币圈用户在选择行情分析软件时,主要关注数据全面性、更新速度、技术工具和使用体验。没有绝对“最好”的App,关键看是否匹配你的操作习惯和投资策略。以下几款应用在市场中表现突出,覆盖行情查看、技术分析、链上数据及交易执行等核心需求。 Co…

    2025年12月9日
    000
  • 看虚拟币行情的网站有哪些 虚拟币行情观看网站前十名盘点

    对于关注数字资产市场动态的朋友来说,一个信息准确、功能全面的行情网站至关重要。本文将为您盘点当前市场上十个主流的虚拟币行情查看网站,分析它们各自的特点和优势,帮助您快速找到最适合自己的数据分析工具。 一、虚拟币行情网站十大排名 1、CoinMarketCap (CMC):作为行业内最老牌、最知名的行…

    2025年12月9日
    000
  • 加密货币1m是多少_1m是加密货币的多少

    在加密货币交易领域,1M 常被用作简写符号,代表一百万单位。这一术语广泛应用于市场数据分析中,帮助交易者快速理解交易量或市值规模。本文将对这一概念进行详细阐述,并提供相关计算示例,以协助用户掌握其实际应用。文章内容基于行业标准惯例,确保信息准确可靠。 一、基本定义与单位含义 1、在加密货币语境下,1…

    2025年12月9日
    000
  • 加密货币量化交易是什么意思?哪些交易所自带量化交易呢?

    目录 什么是量化交易?量化机器人有什么用?量化交易策略分类量化机器人的效益量化交易的优缺点独立量化交易工具交易所自带量化工具如何选择适合的工具?比较几款我用过的加密货币量化交易软件优劣!(网友测评)风险提示 加密货币量化交易是什么意思?支持加密货币量化交易所有哪些?加密货币量化交易机器人是什么? 加…

    2025年12月9日
    000
  • 什么是量化交易?避免人性弱点,币圈必懂的聪明自动理财术

    目录 一、什么是量化交易?二、量化交易的核心原理三、量化交易的基本流程四、常见的量化交易策略类型五、量化交易的主要策略六、量化交易的优势与劣势优势:劣势与挑战:七、总结与展望 刚刚接触加密货币的朋友,或许有听过量化交易这个名词。这个东西时常跟大数据与人工智慧绑在一起,对普通人来说非常难懂。究竟量化交…

    2025年12月9日
    000
  • 加密货币量化交易工具有哪些?哪些交易所自带量化交易工具

    独立工具适合跨平台策略的专业用户,%ignore_a_2%工具以低延迟见长;前者如TradingView、HaasOnline支持多交易所API,后者如币安、OKX提供高效执行与低费率,普通投资者宜用交易所工具,专业者可选独立工具组合,机构则倾向Amber Group或Bybit企业服务。 加密货币…

    2025年12月9日
    000
  • 一文了解什么是加密货币交易中的情绪分析?

    目录 什么是加密货币交易中的情绪分析?为什么情绪分析在加密货币投资中很重要情绪数据的关键来源a. 社交媒体平台b. 新闻媒体c. 市场指标情绪分析的工具和技术情绪分析中常用的工具:采用的技术:将情感分析整合到交易策略中交易者如何使用它:策略示例:假设BTC交易场景场景设置:情感信号:交易者的解读:决…

    2025年12月9日
    000
  • 什么是动量通道?详细解读加密货币交易中的动量通道

    理解加密市场中的动量 在交易领域,动量代表资产价格在某一方向加速变化的速度。它衡量的是趋势的持续强度,通常可预示当前走势是否有望延续或即将反转。在波动性极强的加密市场中,价格常常在短时间内剧烈波动,因此掌握动量的动态显得尤为关键。 为什么动量在加密货币中很重要 加密货币市场以高波动性和不可预测著称。…

    2025年12月8日
    000
  • 什么是Web3撸空投?为什么很多年轻人热衷撸空投

    Web3撸空投本质是用户以注意力与数据换取项目方代币的行为,其核心动因是低门槛、高杠杆与认知套利;1. 项目方通过空投实现冷启动、去中心化叙事与代币分发;2. 参与者以时间投入为主,追求高ROI与暴富想象;3. 交易所作为空投变现枢纽推动价值链闭环;4. 年轻人热衷源于时间套利、幂律收益、游戏化机制…

    2025年12月8日
    000
  • NFT头像怎么制作?NFT头像全流程制作教程

    NFT头像,作为数字世界中的个性化身份标识,其创作过程结合了艺术创意与程序化生成技术。一个完整的NFT头像项目,从一个简单的想法到最终在区块链上呈现,需要经历一系列精心设计的步骤。这个教程将详细分解制作NFT头像的全流程,引导创作者了解其中每一个关键环节。 概念构思与草图设计 1. 确定项目的主题与…

    好文分享 2025年12月8日
    000
  • 什么是OLAXBT(AIO币)?值得投资吗?OLAXBT项目概述,代币经济,前景分析

    目录 OLAXBT项目定位OLAXBT核心技术OlaXBT最新动态AIO代币经济代币分配解锁时间表代币效用OLAXBT生态进展OLAXBT风险管理与应对措施OLAXBT未来规划常见问题总结 olaxbt(aio)是一款将 ai 驱动的量化策略与去中心化交易协议结合的 web3 平台,旨在通过预制与自…

    2025年12月8日 好文分享
    000

发表回复

登录后才能评论
关注微信