Pro*_*ogR 5 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
Run Code Online (Sandbox Code Playgroud)
有一个函数可以遍历 dateframe,
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
Run Code Online (Sandbox Code Playgroud)
这个函数的逻辑是如果value今天大于昨天,前天或之前,那么它是trueor false。这个函数对我来说似乎很慢,所以我如何重写这个函数
for index, row in df.iterrows():
row['a'], index
Run Code Online (Sandbox Code Playgroud)
或者
for idx in df.index:
df.ix[idx, 'a'], idx
Run Code Online (Sandbox Code Playgroud)
或者我可以通过将数据帧转换为 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
628 次 |
| 最近记录: |