python - pandas 数据帧的向量化操作

标签 python pandas

我目前有以下代码,它遍历数据帧的每一行,并将特定单元格的前一行值分配给不同单元格的当前行。

基本上,我所做的就是找出某个指标的“昨天”值与今天的比较。正如您所期望的,这非常慢(特别是因为我正在处理具有数十万行的数据帧)。

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

关于python - pandas 数据帧的向量化操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31554887/

相关文章:

python - 根据第一个字符对列列表(年份)进行切片

python - 将不同函数生成的值写入单个文件中

python - 如何为 python C++ 嵌入构建 boost 示例

python的replace()函数,我应该首先检查我要替换的内容是否是字符串的子字符串?

python - pandas - 按值选择/屏蔽前 n 个元素

python - 在 Pandas 中执行 "outer"连接时如何覆盖相同的列名?

python - 如何改变系列中int元素的值

python - 重新采样 Pandas 中不规则间隔的数据

python - Pandas 从查找 DataFrame 列中减去 DataFrame 列

python - 将列添加到没有标题的 Pandas