我想在现有的DataFrame中创建一个emtpy列,其中第一个值只有一列= 100。之后我想迭代并用公式填充列的其余部分,如row [ C] [t-1] *(1 +行[B] [t])
非常类似于: Creating an empty Pandas DataFrame, then filling it?
但不同之处在于将“C”列的第一个值固定为100与完全公式相比。
import datetime
import pandas as pd
import numpy as np
todays_date = datetime.datetime.now().date()
index = pd.date_range(todays_date-datetime.timedelta(10), periods=10, freq='D')
columns = ['A','B','C']
df_ = pd.DataFrame(index=index, columns=columns)
df_ = df_.fillna(0)
data = np.array([np.arange(10)]*3).T
df = pd.DataFrame(data, index=index, columns=columns)
df['B'] = df['A'].pct_change()
df['C'] = df['C'].shift() * (1+df['B'])
## how do I set 2016-10-03 in Column 'C' to equal 100 and then calc consequtively from there?
df
答案 0 :(得分:1)
试试这个。不幸的是,可能需要类似于for循环的东西,因为您需要根据先前的行值计算下一行,该值需要在向下移动行时保存到变量中(在我的示例中为c_column):
c_column = []
c_column.append(100)
for x,i in enumerate(df['B']):
if(x>0):
c_column.append(c_column[x-1] * (1+i))
df['C'] = c_column