2013-09-29 229 views
0

如何繁殖,如果你有2级自由度的乘用选中的列,结果在一个新的列存储例如熊猫据帧列乘

DF1:

    AAPL IBM GOOG XOM 
2011-01-10 16:00:00 1500 0 0 0 

DF2:

AAPL IBM GOOG XOM 
340.99 143.41 614.21 72.02 
340.18 143.06 616.01 72.56 

我想乘法,df1中的aapl与df2中的340.99,并将结果存储在transaction_amount中。

+0

你可以有一个看看StackOverflow的格式指导?要确定你想要的东西有点困难。此外,请检查您的示例数据框架是否有意义。 df2的列名是什么?这对于答案确实很重要。 – TomAugspurger

+0

嗨我试图格式化,我没有得到它的窍门。 df2的列是df1中证券的不同价格。 – trinity

+1

查看我对你的问题的编辑(一旦它通过了同行评审,df2是否有索引?pandas'DataFrames'被标记为默认情况下,df1 * df2对于'AAPL'将只有一个非'NaN' df2的第一行具有相同的索引值'2011-01-10 16:00:00'(如果这是你的索引) – TomAugspurger

回答

0
transaction_amount = np.diag(df1.dot(df2.T)) 

基本上,做你想做什么,你想要做某种形式的DF1的点积与DF2

df1.dot(df2) 

但由于它们具有相匹配的尺寸,你需要调换DataFrames

之一
df2.T 

如果您了解矩阵点积的工作原理,您将会理解您只需要矩阵的对角线上的阵列数据。即:您只需要(第X天的AAPL价格*第Y天的AAPL份额,其中X == Y)因此,矩阵中与您相关的值位于(0,0),(1,1) ,(2,2)等,即:对角线。

一旦您使用cumsum创建控股矩阵,计算投资组合价值时,此行也很有用。

一些有用的来源

http://www.mathsisfun.com/algebra/matrix-multiplying.html http://mathinsight.org/dot_product_matrix_notation