我有一个名为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
非常感谢
答案 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']