繁体   English   中英

对熊猫数据帧的矢量化操作

[英]Vectorized operation on pandas dataframe

我目前有以下代码,这些代码遍历数据帧的每一行,并将某个单元格的先前行值分配给其他单元格的当前行。

基本上,我正在做的是找出某个指标与今天相比的“昨天”价值。 如您所料,这是相当慢的(特别是因为我正在使用具有成千上万行的数据框)。

for index, row in symbol_df.iterrows():
    if index != 0:
        symbol_df.loc[index, 'yesterday_sma_20'] = symbol_df.loc[index-1]['sma_20']
        symbol_df.loc[index, 'yesterday_roc_20'] = symbol_df.loc[index-1]['roc_20']
        symbol_df.loc[index, 'yesterday_roc_100'] = symbol_df.loc[index-1]['roc_100']
        symbol_df.loc[index, 'yesterday_atr_10'] = symbol_df.loc[index-1]['atr_10']
        symbol_df.loc[index, 'yesterday_vsma_20'] = symbol_df.loc[index-1]['vsma_20']

有没有办法将其转换为矢量化操作? 还是真的有任何加快速度的方法,而不必分别遍历每一行?

我可能会忽略某些内容,但是我认为使用.shift()应该可以做到。

import pandas as pd

df = pd.read_csv('test.csv')
print df

#         Date    SMA_20    ROC_20
# 0  7/22/2015  0.754889  0.807870
# 1  7/23/2015  0.376448  0.791365
# 2  7/22/2015  0.527232  0.407420
# 3  7/24/2015  0.616281  0.027188
# 4  7/22/2015  0.126556  0.274681
# 5  7/25/2015  0.570008  0.864057
# 6  7/22/2015  0.632057  0.746988
# 7  7/26/2015  0.373405  0.883944
# 8  7/22/2015  0.775591  0.453368
# 9  7/27/2015  0.678638  0.313374

df['y_SMA_20'] = df['SMA_20'].shift()
df['y_ROC_20'] = df['ROC_20'].shift()
print df

#         Date    SMA_20    ROC_20  y_SMA_20  y_ROC_20
# 0  7/22/2015  0.754889  0.807870       NaN       NaN
# 1  7/23/2015  0.376448  0.791365  0.754889  0.807870
# 2  7/22/2015  0.527232  0.407420  0.376448  0.791365
# 3  7/24/2015  0.616281  0.027188  0.527232  0.407420
# 4  7/22/2015  0.126556  0.274681  0.616281  0.027188
# 5  7/25/2015  0.570008  0.864057  0.126556  0.274681
# 6  7/22/2015  0.632057  0.746988  0.570008  0.864057
# 7  7/26/2015  0.373405  0.883944  0.632057  0.746988
# 8  7/22/2015  0.775591  0.453368  0.373405  0.883944
# 9  7/27/2015  0.678638  0.313374  0.775591  0.453368

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM