我有两个数据框df_trade
和df_close
,我想将他们的点积存储在ts_fund
中,但如果ts_fund
是一个问题并不重要数组,数据帧,向量等。这两个数据帧将值和时间存储为datetime
。例如,df_trade
:
2011-1-05 15 100
2011-1-20 10 200
和df_close
2011-1-05 1 .5
2011-1-20 .8 .1
所以我希望ts_fund
中的结果为:
2011-1-05 65
2011-1-20 28
我尝试了下面的
ts_fund = np.zeros((len(ldt_timestamps), 1))
ts_fund = pd.DataFrame(ts_fund, index=ldt_timestamps, columns='portfolio value')
for index, row in df_trade.iterrows():
portfolio_value = np.dot(row.values.astype(float), df_close.ix[index].values)
ts_fund[index] = portfolio_value
但是我收到了错误
TypeError: Index(...) must be called with a collection of some kind, 'portfolio value' was passed
如果我将ts_fund
设置为矢量或数组而不是数据帧会更容易吗?
答案 0 :(得分:0)
这样就够了吗?
def equity(df1,df2):
shape1 = df1.shape
shape2 = df2.shape
if not shape1 == shape2:
raise Exception("df's are of different size!")
return df1.mul(df2, axis='columns', fill_value=0).sum(axis =1)
equity(df1, df2)
2011-01-05 65
2011-01-20 28
dtype: float64
一般情况下,避免迭代行,除非绝对必要,并尝试利用pandas的矢量化操作