2016-04-29 52 views
0

我有一个名为stockData的数据框,下面会看到一个非常简化版本的cab。将某些数据帧列乘以其他列并存储结果

date  BBG.XLON.BTA.S_LAST BBG.XLON.BTA.S_FX BBG.XLON.VOD.S_LAST BBG.XLON.VOD.S_FX 
30/01/2008 257.25    1.337    176.9    1.337 
31/01/2008 259     1.3375    175.3    1.3375 
01/02/2008 264.5    1.3277    181.3    1.3277 
04/02/2008 262     1.3307    177.9    1.3307 

数据框具有此刻螺母每只股票2列可能有更多的(也将有数百种股票在这里最终)。有没有办法让_FX列乘以每个股票的_LAST列?所以,我最终会看起来像一个数据帧:

date  BBG.XLON.BTA.S_LAST BBG.XLON.BTA.S_FX  BBG.XLON.BTA.S_EUR BBG.XLON.VOD.S_LAST BBG.XLON.VOD.S_FX BBG.XLON.VOD.S_EUR 
30/01/2008 257.25    1.337     343.94    176.9    1.337    236.515 
31/01/2008 259     1.3375    346.4125    175.3    1.3375    234.463 
01/02/2008 264.5    1.3277    351.1767    181.3    1.3277    240.463 
04/02/2008 262     1.3307    348.6434    177.9    1.3307    236.731 

非常感谢

+0

does'df.ix [:,:: 2] .mul(df.ix [:,1 :: 2] .values)'work? – EdChum

+0

您是以这种_pivoted_格式获取您的数据还是您自己做?如果您将数据垂直添加一个“公司”列,那么处理数据会容易得多。几乎所有最后的问题都是关于如何处理这个数据结构的。 – MaxU

回答

1

你可以使用一个for循环来实现这一目标。

#column names selection (it assume that the columns base name has a fixed length and starts by BBG) 
In [54]: columns_prefix = set([col[0:14] for col in df.columns if col.startswith("BBG")]) 

In [55]: columns_prefix 
Out[55]: {'BBG.XLON.BTA.S', 'BBG.XLON.VOD.S'} 

In [56]: for pre in columns_prefix: 
    ....:  df[pre+"_EUR"] =df[pre+"_FX"]*df[pre+"_LAST"] 
    ....: 

In [57]: df 
Out[57]: 
     date BBG.XLON.BTA.S_LAST BBG.XLON.BTA.S_FX BBG.XLON.VOD.S_LAST \ 
0 30/01/2008    257.25    1.3370    176.9 
1 31/01/2008    259.00    1.3375    175.3 
2 01/02/2008    264.50    1.3277    181.3 
3 04/02/2008    262.00    1.3307    177.9 

    BBG.XLON.VOD.S_FX BBG.XLON.BTA.S_EUR BBG.XLON.VOD.S_EUR 
0    1.3370   343.94325   236.51530 
1    1.3375   346.41250   234.46375 
2    1.3277   351.17665   240.71201 
3    1.3307   348.64340   236.73153 

我希望这可以帮助你

0

大熊猫包已经做标产品非常有效(因为它是用C来编写):

df['BBG.XLON.BTA.S_EUR'] = df['BBG.XLON.BTA.S_LAST']*df['BBG.XLON.BTA.S_FX'] 
df['BBG.XLON.VOD.S_EUR'] = df['BBG.XLON.VOD.S_LAST']*df['BBG.XLON.VOD.S_FX'] 

如果不手动希望输入您的类别,你可以先建立他们的名单:

cat_list = [] 
for i in range(len(df.columns)/2): 
    cat_list.append(df.columns[2*i][:-2]) 

,然后自动创建新列:

for cat_name in cat_list: 
    df[cat_name + 'EUR'] = df[cat_name + 'FX']*df[cat_name + 'LAST'] 
相关问题