python - 如何在一系列行上对 pandas 数据框列进行矢量化?
问题描述
所以我有一个 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 DataFrames。
答案之一是指除了粗暴迭代之外更好的数据处理方式:“Pandas 中的迭代是一种反模式,只有在用尽所有其他选项时才应该这样做。你不应该使用任何带有“iter”的函数以它的名字显示超过几千行,否则你将不得不习惯大量等待。” 因此,我想对我的方法进行矢量化,这样我就可以一次操作多行,从而大大减少我的运行时间。
我正在查看其他问题,大多数答案都有一定的帮助,但我需要针对我的特定问题的细节方面的帮助。我认为我想要完成的大部分工作可以用以下列表来概括:
- 给定一个包含多个列的 Pandas DataFrame,遍历单个列。
- 在单个列中,遍历某个范围的值(例如,在 10k 行的过程中,从第一行到第 10k 行,值从 1 增加到 100,仅遍历值 20-50)。
对于我的问题的重复性,我提前抱歉,我只是在努力解决这个特殊的问题,试图创建有效的迭代代码。
解决方案
鲍勃,
只需使用 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']
无论如何,直接数学运算比迭代快几个数量级。看看熊猫的力量吧!:)
推荐阅读
- c++ - 在 C++ 中合并线程协程输出
- nagios - 使用 check_disk 从 centreon 20.4 监控主机
- onclick - 在 Python Turtle 中的事件处理程序中调用函数
- r - 闪亮仪表板中的 dateRangeInput
- microsoft-graph-api - 从返回错误的团队获取驱动器 ID
- opencv - 为什么 OpenCV VideoCapture 读取帧的速度比我的 HLS 流的 FPS 快 4 倍
- r - 通过R中的几个条件将多行合并为一行
- sql - 必须在 SQL SERVER 和 C# 中声明标量变量
- python - 产生空文件的梁管道
- css - Django Rest Framework 发送电子邮件但模板不加载 CSS