【问题标题】:How would one vectorize over a pandas dataframe column over a range of rows?如何在一系列行上对 pandas 数据框列进行矢量化?
【发布时间】:2023-04-06 16:01:01
【问题描述】:

所以我有一个 Pandas DataFrame,其中 x 列有 y 行。 DataFrame 中的数据是 float64 值。我正在尝试计算两列之间的斜率相关性,但是对于单列的范围(例如,列有 25000 行,我只想要 5-10 范围内的值,恰好在 2000-4000 行中)。为了做到这一点,我打算以以下伪代码演示的方式进行迭代:

for i in range(i, len(df['Column 1']))
    if df.loc[i, 'Column 1'] <= 10.0 & df.loc[i, 'Column 1'] >= 5.0:
        value = df.loc[i, 'Column 1'] / df.loc[i, 'Column 2']
        df['New Column'].append(value)

注意:上面的代码不能正常工作;更多只是我要完成的工作的概述

我正在寻找遍历 Pandas DataFrames 的方法,并发现了这个链接:How to iterate over rows in a Pandas DataFrame

其中一个答案是指除了粗暴迭代之外更好的数据处理方法:“Pandas 中的迭代是一种反模式,只有在用尽其他所有选项时才应该这样做。你不应该使用任何函数“iter”在它的名字中超过几千行,否则你将不得不习惯大量的等待。”因此,我想对我的方法进行矢量化处理,这样我就可以一次操作多行,从而大大减少我的运行时间。

我正在查看其他问题,大多数答案都有一定的帮助,但我需要针对我的特定问题的细节方面的帮助。我认为我想要完成的大部分工作可以用以下列表来概括:

  1. 给定一个包含多列的 Pandas DataFrame,遍历单个列。
  2. 在单个列中,遍历特定范围的值(例如,在 10k 行的过程中,值从 1 增加到 100,从第 1 行到第 10k 行,仅遍历值 20-50)。

对于我的问题的重复性,我很抱歉,我只是在努力解决这个特殊的问题,试图创建高效的迭代代码。

【问题讨论】:

    标签: python pandas numpy dataframe


    【解决方案1】:

    鲍勃,

    只需使用 loc 选择带有条件的行,然后输入带有列引用的公式:

    df.loc[(df['Column 1'] <= 10.0) & (df['Column 1'] >= 5.0), 'New Column'] = df['Column 1'] / df['Column 2']
    

    在你的情况下,between 更优雅:

     df.loc[(df['Column 1'].between(5, 10, inclusive=True), 'New Column'] = df['Column 1'] / df['Column 2']
    

    无论如何,直接数学运算比迭代快几个数量级。看看熊猫的力量吧! :)

    【讨论】:

    • 哇...这很酷,不会撒谎。我是一名刚接触熊猫数据可视化的高中生,非常感谢先生的帮助。非常感谢:D
    • 我很高兴它有帮助。阅读 Pandas - 它非常强大。搜索 SO。如果确实卡住了,请发布到 SO。
    猜你喜欢
    • 1970-01-01
    • 2020-08-16
    • 2017-09-26
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 2019-06-18
    • 1970-01-01
    • 2019-10-02
    相关资源
    最近更新 更多