2016-04-29 17 views
0

私はstockDataというデータフレームを持っています。特定のデータフレーム列を他の列に掛けて結果を格納する

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列を掛ける方法はありますか?あなたはそれを達成するためにforループを使用することができ

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

'df.ix [:、:: 2] .mul(df.ix [:、1 :: 2] .values)'は動作しますか? – EdChum

+0

データはすでにこの_pivoted_形式で取得していますか、それとも自分で作成していますか?追加の「会社」列を使用してデータを垂直に持っていれば、データを処理するほうがずっと簡単です。ほとんどすべてのあなたの最後の質問についてです - どのようにこのデータ構造に対処する... – MaxU

答えて

1

:だから私はのように見えたデータフレームで終わるでしょう。

#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]) 

列:

関連する問題