numpy.where ()函数及np.where和pandas的配合使用

numpy.where介绍

numpy.where()官方文档

NumPy 中的 numpy.where 函数:灵活的条件选择器

NumPy 是 Python 中一个强大的数值计算库,其中的 numpy.where 函数是其功能强大且常用的功能之一。这个函数可以根据条件选择返回来自两个不同数组的元素,在条件为真时返回第一个数组的元素,在条件为假时返回第二个数组的元素。让我们来深入了解这个函数的用法和功能。

函数基本形式

numpy.where(condition, [x, y]) 可以接受三个参数:condition 作为条件,xy 作为选择的两个数组。当只提供 condition 参数时,这个函数等同于 np.asarray(condition).nonzero(),用来获取条件为真的索引。但这篇文章将重点讨论提供了三个参数的情况。

参数解析

  • condition:一个布尔类型的数组,用来指定选择哪些元素来自数组 x 或者 y
  • xy:作为条件为真或假时的返回值的两个数组。

返回值

numpy.where 函数返回一个数组,其中包含了根据条件选择的元素。当条件为真时,返回来自数组 x 的元素,否则返回来自数组 y 的元素。

示例

  • 一维数组的条件选择:

    css 复制代码
    pythonCopy code
    import numpy as np
    
    a = np.arange(10)
    result = np.where(a < 5, a, 10 * a)
    print(result)

    这段代码会输出 [0, 1, 2, 3, 4, 50, 60, 70, 80, 90],根据条件 a < 5 选择了不同的元素。

  • 多维数组的条件选择:

    lua 复制代码
    pythonCopy code
    import numpy as np
    
    result = np.where([[True, False], [True, True]],
                      [[1, 2], [3, 4]],
                      [[9, 8], [7, 6]])
    print(result)

    这段代码会输出一个二维数组 [[1, 8], [3, 4]],根据提供的条件选择了不同位置的元素。

  • 广播操作:

    ini 复制代码
    pythonCopy code
    import numpy as np
    
    x, y = np.ogrid[:3, :4]
    result = np.where(x < y, x, 10 + y)
    print(result)
    
    array([[10,  0,  0,  0],
       [10, 11,  1,  1],
       [10, 11, 12,  2]])

    这个例子展示了如何对两个不同形状的数组进行条件选择。

总结

numpy.where 函数在处理条件选择时非常灵活,可以用于一维或多维数组,并且支持数组的广播操作。通过合理利用这个函数,我们可以简洁高效地根据条件选择数组元素,是 NumPy 中一个不可或缺的重要工具。

无论是数据处理、条件筛选还是数组操作,numpy.where 函数都是进行条件选择的绝佳选择,能够快速、高效地满足多种需求。

np.where和pandas的配合使用

在特征工程中经常需要使用数据清洗,这时候就可以使用where和pd配合来进行数据筛选。

bash 复制代码
 best = np.where(df['hearing(left)'] < df['hearing(right)'], 
                    df['hearing(left)'],  df['hearing(right)'])

例子:

这里使用了 NumPy 的 numpy.where 函数来比较 DataFrame 中两列数据('hearing(left)''hearing(right)'),并根据条件选择对应位置的值。 具体来说,它会比较 'hearing(left)' 列和 'hearing(right)' 列中的每个元素。当 'hearing(left)' 列中的元素小于 'hearing(right)' 列中的对应元素时,best 数组中对应位置的值将会是 'hearing(left)' 列的值;反之,则是 'hearing(right)' 列的值。

相关推荐
梦帮科技15 小时前
从提示词到可复现音乐工作流:RNOISE 2.0 的 Prompt Engineering 架构
人工智能·python·mysql·ci/cd·架构·node.js·numpy
飞Link15 小时前
【Numpy】 第三部分:矩阵运算与线性代数(计算篇)
python·numpy
kyrie_sakura1 天前
python学习笔记15 -- Anaconda,Jupyter,numpy
python·学习·jupyter·numpy
智购科技无人售货机工厂1 天前
2026自动售货机AI智能体架构:从47个小模型到33.7亿Token的工程实践~YH
android·人工智能·驱动开发·单片机·pandas
小葱炖豆腐2 天前
python绘制excel折线图
python·excel·numpy·pandas·matplotlib
七灵微2 天前
【AI】代码实战- 基于时间序列的轴承检测1
人工智能·机器学习·ai·pandas·matplotlib
2601_966949653 天前
为什么量化策略需要大量历史股票数据?从回测可信度理解数据规模
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
2601_966949653 天前
从轮询到策略消费:量化系统如何高效处理五档盘口数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
weixin199701080164 天前
[特殊字符]《跨境二手ERP对接Back Market:标准化API + 7~10工作日技术合规审核实录》(附Python源码)
开发语言·python·pandas
2601_966949656 天前
批量 K 线不只是提速:因子研究中的数据质量、复权与回测偏差
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash