2016-04-29 9 views
0

Ich habe einen Datenrahmen namens stockData eine sehr reduzierte Version cab unten zu sehen.Multiplizieren bestimmte Datenframe Spalten durch andere Spalten und speichern Sie das Ergebnis

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 

Der Datenrahmen hat zwei Spalten pro Lager zur Zeit Mutter kann mehr (es wird auch hier schließlich Hunderte von Aktien sein). Gibt es eine Möglichkeit, für jeden Bestand die Spalte _LAST mit der Spalte _FX zu multiplizieren? So würde ich mit einem Datenrahmen am Ende, die aussahen:

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 

Vielen Dank

+0

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

+0

Erhalten Sie Ihre Daten bereits in diesem _pivoted_ Format oder tun Sie es selbst? Es wäre so viel einfacher, Ihre Daten zu verarbeiten, wenn Sie Ihre Daten vertikal mit einer zusätzlichen Spalte "Firma" hätten. Fast alle Ihre letzten Fragen beschäftigen sich mit - wie man mit dieser Datenstruktur umgeht ... – MaxU

Antwort

1

Sie eine for Schleife das erreichen nutzen könnten.

#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 

Ich hoffe, das kann Ihnen helfen,

0

Die Pandas Paket bereits tut Skalarprodukte sehr effizient (wie es in C codiert):

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'] 

Wenn Sie nicht wollen, manuell Geben Sie Ihre Kategorien ein, können Sie zuerst ihre Liste erstellen:

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

Und dann automatisch erstellen Sie Ihre neue Spalten:

for cat_name in cat_list: 
    df[cat_name + 'EUR'] = df[cat_name + 'FX']*df[cat_name + 'LAST'] 
Verwandte Themen