2016-04-29 46 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'] 
相關問題