乘以上面的单元格,用公式创建pandas数据帧

时间:2016-05-18 00:28:17

标签: python pandas dataframe

我正在尝试从100开始获得一个新的df列'dos',然后每个单元格会将它上面的数字乘以'uno'中的相应单元格。出于某种原因,它只是在100之后给我NaN。

GrVsVal = pd.DataFrame(columns = ['uno', 'dos'], index = df_ch.index)
GrVsVal['uno'] = 1 + (df_ch['IVV'] - df_ch['IVE'])
GrVsVal['dos'].ix[0] = 100
GrVsVal['dos'].ix[1:] = GrVsVal['uno'].ix[1:] * GrVsVal['dos'].ix[0:]

print GrVsVal
它给了我:

          uno     dos
Date    
1/2/12   .997     100
1/3/12   .677     NaN
1/4/12   .986     NaN

所以第一个NaN应该是100 * .677,第二个NaN将是第一个NaN * .986的结果

2 个答案:

答案 0 :(得分:1)

有点难以分辨代码中的某些内容。但是这得到了你想要的结果(如果我理解正确的话):

import pandas as pd


date = ['1/2/12', '1/3/12', '1/4/12']
uno = [.997, .677, .986]

GrVsVal = pd.DataFrame({'date': date, 'uno':uno})
dos = [100]
i = 0
for u in GrVsVal.iterrows():
    while i+1 < len(GrVsVal['uno']):
        dos.append(GrVsVal['uno'][i+1]*dos[i])
        i += 1

GrVsVal['dos'] = dos

print(GrVsVal)

运行它,你会看到结果。然后根据需要调整代码。 编辑:抱歉,我搞砸了。现在应该修好。

答案 1 :(得分:1)

GrVsVal = pd.DataFrame({'uno': 1 + df_ch['IVV'] - df_ch['IVE']}, index = df_ch.index)

GrVsVal['dos'] = 100
GrVsVal.loc[1:, 'dos'] = GrVsVal.uno[1:].cumprod() * 100
>>> GrVsVal
          uno       dos
  Date
1/2/12  0.997  100.0000
1/3/12  0.677   67.7000
1/4/12  0.986   66.7522