将某些数据帧列乘以其他列并存储结果

时间:2016-04-29 12:37:06

标签: python python-3.x pandas

我有一个名为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列螺母可能有更多(最终还会有数百只股票)。是否有一种方法可以将_LAST列的每个库存乘以_FX列?所以我最终得到的数据框看起来像:

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

非常感谢

2 个答案:

答案 0 :(得分: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

我希望这可以帮到你

答案 1 :(得分:0)

pandas软件包已经非常有效地进行标量产品(因为它用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']