如何在if语句的列中使用前N个值

社交病

我有一个数据框df

df=pd.DataFrame([[47,55,47,50,200], [33,37,30,25,100],[61,65,54,57,300],[25,26,21,22,400], [25,29,23,28,410],[28,34,32,30,430],[32,31,30,28,1000]], columns=['open','high','low','close','volume'])
print(df)

  open high low close volume
0   47  55  47  50  200
1   33  37  30  25  100
2   61  65  54  57  300
3   25  26  21  22  400
4   25  29  23  28  410
5   28  34  32  30  430
6   32  31  30  28  1000

我想75th percentile使用公式从体积列替换离群值

if df['volume'] > (3IQR + vol_q3):

3IQR是音量列的IQR * 3

vol_q3是体积中最后N个值的75个百分位数(在本例中为最后4个值)。

我写的代码如下:

from collections import deque
import pandas as pd
import numpy as np

vol_q=deque()

q1 = df['volume'].quantile(0.25)
q3 = df['volume'].quantile(0.75)
iqr_3 = 3*(q3 - q1)

for idx, rows in df.iterrows():
    if idx < 5:
        vol_q.append(rows['volume'])
    else :
        vol_q.popleft()
        vol_q.append(rows['volume'])

    vol_q3 = np.percentile(list(vol_q), 75)

    if rows['volume'] > (iqr_3 + vol_q3):
        rows['volume'] = q3

输出:

    open high low close volume
0   47  55  47  50  200
1   33  37  30  25  100
2   61  65  54  57  300
3   25  26  21  22  400
4   25  29  23  28  410
5   28  34  32  30  430
6   32  31  30  28  420

它正在工作,但是对于我拥有的数据量来说太慢了。还有其他方法可以更快地实现它吗?如何使用Apply使用以前的N个值

欢迎任何建议。谢谢

约翰·兹温克
v = df.volume # other columns not relevant to question
q = v.rolling(4).quantile(0.75) # 75th percentile of last 4
r = v.where(v <= iqr_3 + q, q3)

q是向量化滚动分位数,可以快速计算而没有循环。r是结果,因此很难从您的问题中进行验证,因为示例数据似乎没有包含足以触发条件的极端值,但我认为您已经明白了。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在SELECT FOR XML语句的AS中使用列值

如何在 hive 插入分区语句中使用 UDF 值或列值,而不是常量值

如何在一个语句中使用单个值 UPSERT 多行?

如何在mysql中使用case语句将3列数据合并为一个

如何在插入语句中使用每个月的动态表,而我们在一列中传递一个静态值

如何在SQL中使用max()查找前5个值

如何在PHP中使用JSON获取数组的前10个值

如何在 if 语句中使用 JSON 文件中的值

如何在选择查询中使用case语句设置值?

如何在当前行的新列中获取列的前 n 个值的列表?

如何在Shell脚本中使用两个“ for语句”?

如何在Codeigniter中使用一个列检查两个值

在VBA的IF语句中,如何在Match语句中的2个部分文本中使用OR语句?

如何在DataFrame中有条件地获取列的前n个值的列表?

如何在Bigquery的一个select语句中使用两个group by语句?

如何在foreach语句中使用值= 1的数据库列中的逗号插入数组中的数据?

如何在R中使用groupby获取满足条件的列的第一个值?

如何在range()语句中使用的toscalar()语句中访问range-step值

如何在第二个SQL语句中使用SQL语句的结果?| 的PHP

如何创建一个增量向量,使用向量操作逐行追加前 N 列的值

Pandas GroupBy:如何基于列获取前n个值

如何从数据框列中获取前n个值?

如何在case语句中使用优先值或在函数中的sql语句中的case语句中设置变量

如何在SQL Server中使用group by列基于where子句获取每个组的前1个记录

如何在1个select语句中使用2个和?

如何在R中使用ifelse语句

如何在if语句中使用循环

如何在addCondition,YII中使用If语句

如何在aspx页面中使用If语句