Pandas条件乘法

5vf7fwbs  于 2023-06-04  发布在  其他
关注(0)|答案(1)|浏览(109)

这里是Pandas新手(也是数据科学新手)。
我正在尝试将当前的当地货币转换为当前的美元,这将涉及将每个数据点乘以相应的汇率。数据结构如下所示:

import pandas as pd

dataset = pd.DataFrame([
            ["CNY", 321.4, 123.3, 2131, 2134],
            ["EUR", 2144, 3521, 3152, 6421],
            ["CNY", 9999, 1234, 96, 879]],
            columns=["Currency", 2000, 2001, 2002, 2003]) 
rates = pd.DataFrame([
            ["CNY", 6.1, 6.8, 7.4, 5.8],
            ["EUR", 1.1, 1.0, 2.5, 3.1]], 
            columns=["Currency", 2000, 2001, 2002, 2003])

我想乘以年值,即在货币代码匹配的条件下,将列“2000”、“2001”、“2002”和“2003”下的数据与相应的兑换值进行比较。
我见过一个使用where()函数的answer on a similar subject。我有一种感觉,这是要走的路,但在那个例子中,这个人有两个相同维度的 Dataframe ,所以它是用一个简单的乘法完成的。我的汇率数据框与实际数据表的维度不同,其中一些货币出现多次。我想通过迭代数据集来强制执行它,但这很糟糕。我还怀疑我可能可以沿着自然连接的路线做一些事情,但不幸的是,我对数据科学的了解还不够。
编辑:原来的代码是错误的,因为我不知道如何使用构造函数。我修改了代码下面的注解。

t3irkdon

t3irkdon1#

假设输入为此,使用货币作为索引:

import pandas as pd
dataset = pd.DataFrame ([
            ["CNY", 321.4, 123.3, 2131, 2134],
            ["EUR", 2144, 3521, 3152, 6421], 
            ["CNY", 9999, 1234, 96, 879]], 
            columns=["Currency", 2000, 2001, 2002, 2003])
rates = pd.DataFrame ([
            ["CNY",6.1, 6.8, 7.4, 5.8], 
            ["EUR",1.1, 1.0, 2.5, 3.1]], 
            columns=["Currency", 2000, 2001, 2002, 2003])

out = dataset.set_index('Currency').mul(rates.set_index('Currency'))
  • 可选.reset_index()再次设置“Currency”作为列,但最好将其保留为索引。*

输出:

2000     2001     2002     2003
Currency                                     
CNY        1960.54   838.44  15769.4  12377.2
CNY       60993.90  8391.20    710.4   5098.2
EUR        2358.40  3521.00   7880.0  19905.1

或者:

out = dataset.set_index('Currency').mul(rates.set_index('Currency').loc[dataset['Currency']])

输出:

2000     2001     2002     2003
Currency                                     
CNY        1960.54   838.44  15769.4  12377.2
EUR        2358.40  3521.00   7880.0  19905.1
CNY       60993.90  8391.20    710.4   5098.2

您也可以使用左合并来对齐费率:

dataset[['Currency']].merge(rates, how='left')

相关问题