如何合并两个数据框,然后将结果与另一个数据框相乘?

匿名

我正在从一个API来源收集汇率数据,并从另一来源收集国际股票价格,并希望以单一货币表示收益。

问题是有关符号的信息需要与相应的货币匹配,然后乘以汇率以获取计价收益。

我根本无法解决如何最有效地组合这些操作的问题。

如何合并交易品种和汇率信息,然后如何最有效地将结果与股票价格相乘?

示例数据,限于比实际数量少的货币和符号

透视数据

                           Rate                                         Units
Currency    Danish krone  Euro  Swedish krona  US dollar Danish krone  Euro  Swedish krona  US dollar 
Date                                                     
2016-01-04  128,98        9,62     104,22      8,9578    Hundreds      Units    Hundreds     Units 
2016-01-05  130           9,69     104,52      8,923     Hundreds      Units    Hundreds     Units 

原始FX数据,CSV格式

Exchange rates,Business,Swedish krona,Norwegian krone,Spot,2016-01-04,105.21,2,false,Hundreds,ECB concertation time 14:15 CET
Exchange rates,Business,Swedish krona,Norwegian krone,Spot,2016-01-05,103.95,2,false,Hundreds,ECB concertation time 14:15 CET
Exchange rates,Business,US dollar,Norwegian krone,Spot,2016-01-04,8.8525,4,false,Units,ECB concertation time 14:15 CET
Exchange rates,Business,US dollar,Norwegian krone,Spot,2016-01-05,8.9224,4,false,Units,ECB concertation time 14:15 CET
Exchange rates,Business,Euro,Norwegian krone,Spot,2016-01-04,9.6475,4,false,Units,ECB concertation time 14:15 CET
Exchange rates,Business,Euro,Norwegian krone,Spot,2016-01-05,9.588,4,false,Units,ECB concertation time 14:15 CET
Exchange rates,Business,Danish krone,Norwegian krone,Spot,2016-01-04,129.29,2,false,Hundreds,ECB concertation time 14:15 CET
Exchange rates,Business,Danish krone,Norwegian krone,Spot,2016-01-05,128.52,2,false,Hundreds,ECB concertation time 14:15 CET

也可以以beta JSON或XML格式获取数据。https://www.norges-bank.no/en/Statistics/open-data/get-data/

库存数据

Symbols             AAPL    ASSA-B.ST   BMW.DE  CARL-B.CO
Date                
04.01.2016 00:00    105,37   175,8     94,71    618
05.01.2016 00:00    105,85   175,2     93,5     612

映射数据帧以将符号链接到fx速率

Symbol      Currency
AAPL        US dollar
ASSA-B.ST   Swedish krona
BMW.DE      Euro
CARL-B.CO   Danish krone

我无法使用python生成的预期输出是

Symbols                AAPL     ASSA-B.ST    BMW.DE     CARL-B.CO
Date                
04.01.2016 00:00     943,88      183,22      911,35      797,10 
05.01.2016 00:00     944,50      183,12      906,72      795,60 

货币转换的公式为价格*货币单位货币,价格*货币/ 100货币单位为数百。

赞欣

忍受我,因为需要进行一些清洁和调整才能获得所需的结果。

首先,请提供易于转换为输入的数据供他人使用。纯文本,.csv和.xlsx通常是最好的。

  1. 子集您的数据框,并将“费率”转换为单位:

    df1 = df1.rename(columns = {2:'Currency', 5:'Date', 6:'Rate', 9:'UoM'})
    df1 = df1[['Currency', 'Date', 'Rate', 'UoM']]
    df1['Rate'] = np.where(df1.UoM == 'Hundreds', df1.Rate / 100, df1.Rate)
    
            Currency        Date    Rate       UoM
    0  Swedish krona  2016-01-04  1.0521  Hundreds
    1  Swedish krona  2016-01-05  1.0395  Hundreds
    2      US dollar  2016-01-04  8.8525     Units
    3      US dollar  2016-01-05  8.9224     Units
    4           Euro  2016-01-04  9.6475     Units
    5           Euro  2016-01-05  9.5880     Units
    6   Danish krone  2016-01-04  1.2929  Hundreds
    7   Danish krone  2016-01-05  1.2852  Hundreds
    
  2. 您的“库存数据”为df2(除了将值中的“,”替换为“。”以外,我不得不清理该部分,日期时间格式与您提供的其他数据不同);

    df2
    
                  AAPL  ASSA-B.ST  BMW.DE  CARL-B.CO
    Date                                            
    2016-01-04  105.37      175.8   94.71        618
    2016-01-05  105.85      175.2   93.50        612
    
  3. 您的“符号”框架在此处为df3。通过合并将符号添加到df1,然后通过groupby获得类似于'stock-data'(df2)的数据框;

    merg = pd.merge(df1, df3, on='Currency')
    df1['Date'] = pd.to_datetime(df1['Date'])
    merg = merg.groupby(['Date', 'Symbol'])['Rate'].sum().unstack()
    
    merg
    
    Symbol        AAPL  ASSA-B.ST  BMW.DE  CARL-B.CO
    Date                                            
    2016-01-04  8.8525     1.0521  9.6475     1.2929
    2016-01-05  8.9224     1.0395  9.5880     1.2852
    
  4. 将两个数据框格式化为数字格式,将其相乘并四舍五入到小数点后两位;

    cols = merg.columns
    merg[cols] = merg[cols].apply(pd.to_numeric, errors='coerce')
    cols2 = df2.columns
    df2[cols2] = df2[cols2].apply(pd.to_numeric, errors='coerce')
    
    fin = merg.mul(df2)
    
    fin.round(2)
    
    Symbol        AAPL  ASSA-B.ST  BMW.DE  CARL-B.CO
    Date                                            
    2016-01-04  932.79     184.96  913.71     799.01
    2016-01-05  944.44     182.12  896.48     786.54
    

注意; 最后的值与您的不同。那是因为您以后提供的数据是不同的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python:如何通过保留第一个数据框的信息来合并两个数据框?

如果第一个数据框中的列数据存在于python中另一个数据框的任何列中,则合并两个数据框

如何将一个数据框的单列中的值映射到另一个数据框的两列并提取映射的值?

熊猫:将另一个数据框的列与列相乘?

如何将一个熊猫数据框中的所有小时值与另一个数据框中的年值相乘?

如何将列从一个数据框合并到另一个数据框

如何将一列从两个数据框连接到另一个数据框?pd.merge返回nan

熊猫:如何通过保留第一个数据框的信息来合并两个数据框?

如何根据两个条件将一个数据框追加到另一个空数据框中?

如何将日期从一个数据框插入另一个数据框?

通过另一个数据框的两列中的值将两个数据框中的一个数据框子集

根据另一个数据框的列值替换两个数据框列的值

将pandas数据框基于另一个数据框分为两个数据框

如何将一个数据框(或矩阵)中的列与另一个数据框的列一一相乘并求和?

如何将一个数据框附加到另一个数据框?

将具有两个日期列的一个数据框与具有两个日期列的另一个数据框合并

如何通过从另一个数据框获取索引来从两个数据框获取列之间的差异?

将数据框中的多个列与另一个数据框中的特定值相乘

将特定的列与另一个数据框合并后无法选择它

如何将整个行与另一个数据框中的匹配行名相乘?

使用条件将数据从一个数据框填充到另一个数据框,然后重复填充直到条件更改

如何将数据框中的列映射到另一个数据框中的两个不同列并检索映射的项目?

比较两个数据框并将差异写入另一个数据框

将R中的两个列表合并到一个数据框中

如何编写将一个数据框转换为另一个数据框的函数?

Python,如何从两个数据框制作一个数据框

比较两个数据框,然后根据另一个数据框向其中一个数据框添加新列

检查一个数据框中的一行是否存在于另一个数据框中,但不要合并两个数据框

如何使用 Pandas 根据另一个数据框的结果更新数据框