首页 > 解决方案 > 使用来自先前行和当前行的值的总和填充数据框行

问题描述

以下代码创建了作为我起点的数据框:

import pandas as pd
import numpy as np


d= {'PX_LAST':[1,2,3,3,3,1,2,2,1,1,3,3],'ma':[2,2,2,2,2,2,2,2,2,2,2,2],'action':[0,0,1,0,0,1,0,0,1,0,1,0]}
df_zinc = pd.DataFrame(data=d)

#add column buy_sell
mask1 = df_zinc['action'] != 0
mask2 = df_zinc['PX_LAST'] < df_zinc['ma']
mask3 = df_zinc['PX_LAST'] > df_zinc['ma']

df_zinc['buy_sell'] = np.select([mask1 & mask2, mask1 & mask3], [-1,1], 0)
df_zinc

我在下面要做的是添加一列,其中每一行是前一行中的值、列“operational_col”的当前值和列“buy_sell”的当前值之和的结果.

#empty operational column and weight column
df_zinc['operational_col']=0
df_zinc['weight']=0

#weight column
while index < df_zinc.shape[0]:                      
df_zinc['weight'][index] = df_zinc['weight'][index-1] + df_zinc['operational_col'][index] + df_zinc['buy_sell'][index]
index = index + 1

这会产生一个只有零的列,而不是我正在寻找的值。有人可以帮忙吗?

标签: pythonpandas

解决方案


在您的示例中,在循环index中访问它之前没有定义它,因此它会创建一个名称错误。while这是使用循环重写的for循环,并loc选择列中的值:

for index in range(1, len(df_zinc)):                     
    df_zinc.loc[index, 'weight'] = df_zinc.loc[index-1, 'weight'] + \
    df_zinc.loc[index, 'operational_col'] + df_zinc.loc[index, 'buy_sell']

推荐阅读