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

2024-10-06 12:31:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个叫做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

数据帧在nut可能有更多的库存时每个库存有2列(这里最终也会有数百个库存)。有没有办法将每只股票的最后一列乘以外汇列?所以我会得到一个如下的数据帧:

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

非常感谢


Tags: 数据版本date库存eur精简lastfx
2条回答

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

您可以使用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

我希望这能帮到你

相关问题 更多 >