使用前一行和当前行的值之和填充数据帧行

问题描述 投票:0回答:1

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

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

这会产生一个只有零的列,而不是我要查找的值。请帮忙吗?

python pandas
1个回答
0
投票

在您的示例中,indexwhile循环中访问之前未定义,因此它会创建名称错误。这是使用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']
© www.soinside.com 2019 - 2024. All rights reserved.