python - 加速 Pandas 数据框迭代

标签 python numpy pandas

我有一个包含日期和值的数据框,

 Date     Price
Jun 30    95.60
Jun 29    94.40
Jun 28    93.59
Jun 27    92.04
Jun 24    93.40
Jun 23    96.10
Jun 22    95.55
Jun 21    95.91
Jun 20    95.10
Jun 17    95.33
Jun 16    97.55
Jun 15    97.14
Jun 14    97.46
Jun 13    97.34
Jun 10    98.83
Jun 9     99.65
Jun 8     98.94
Jun 7     99.03
Jun 6     98.63
Jun 3     97.92
Jun 2     97.72

有一个遍历日期框的函数,

indic_up = [False, False,False, False]
i = 4
while i+4 <= df.index[-1]:
    if (df.get_value(i, 'value') > df.get_value(i-1, 'value')) or
        (df.get_value(i, 'value') > df.get_value(i-2, 'value')) or
        (df.get_value(i, 'value') > df.get_value(i-3, 'value')) or
        (df.get_value(i, 'value') > df.get_value(i-4, 'value')):indic_up.append(True)
    else:indic_up.append(False)
    i = i+1

这个函数的逻辑是,如果今天的大于昨天、前天或那之前,则为truefalse。 这个函数对我来说似乎很慢,所以我怎么能像这样重写这个函数

for index, row in df.iterrows():
row['a'], index

for idx in df.index:
df.ix[idx, 'a'], idx

或者我可以通过将数据帧转换为 numpy 数组来实现更快的速度吗?

最佳答案

让我们也邀请 Scipy!

思路:通过计算该区间中的最小值并与当前元素进行比较,将当前元素与之前的 4 值进行比较。如果匹配,我们基本上所有的比较都失败了,因此选择 False。因此,在代码方面,只需将当前元素与该区间中的最小值进行比较。这就是 scipy 及其 minimum_filter 的用武之地。 .

实现:

from scipy.ndimage.filters import minimum_filter

# Extract values from relevant column into a NumPy array for further procesing
A = df['value'].values

# Look for no match with interval-ed min & look for NOT matching for True as o/p
indic_up_out = A != minimum_filter(A,footprint=np.ones((5,)),origin=2)

# Set first four as False because those would be invalid with a 5 elem runway
indic_up_out[:4] = 0

关于python - 加速 Pandas 数据框迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38211408/

相关文章:

python - 是否有任何函数可以使用Python在Plotly中绘制类似于geom_smooth()的函数?

python - Numpy Linalg 规范行为异常(错误)

python - Python 中的矩阵逆

python - 寻找最大正值或最小负值的向量化版本

python - ffill 不在 pandas dataframe 中填充数据

Pandas 重采样 OHLC 日内数据,不包括正常交易时间以外的数据

python - tensorflow 中的权重初始化

Python值/引用/我都不知道

python - pandas DataFrame to_csv (python) 中的 CSV 方言

python - 根据索引位置连接一维和二维数组