新的pandas数据框,其中现有列作为映射到另一个值的函数的输入

时间:2017-11-07 17:27:47

标签: python pandas dataframe mapping

我正在创建一个货币数据库,我需要将其映射到不同的代码,这将帮助我以更容易的方式操纵它们,这是我的IT系统可以理解的。

我的数据库加载如下:

url = "My RawData csv"

The csv has the below format:
Underlying    Notional
AUDBRL        50,000
AUDCAD        100,000
AUDNZD        20,000 
USDJPY        15,000
AUDKRW        12,000

etc

data = pd.read_csv(url)
data = data.dropna() $

我也在加载我附加的Mapping指南,并通过以下方式访问那里的值:

url2 = "My Mapping csv"
Which has a format as below:
Unique CCY Pairs      CCYs
USDJPY            JPY
EURAUD            ADEU
USDRUB            RUB
AUDKRW            KWAD
EURUSD            EUR
AUDJPY            JYAD
EURJPY            JYEU

mapp = pd.read_csv(url2)
mapp = mapp.set_index('Unique CCY Pairs')
mapp.loc[CCY].values[0] $ 

其中CCY是每个时间点的任何货币。 现在基于此我想在我现有的数据库中创建一个循环,它将在我的数据帧的新CCY值列中为我提供映射值:

我已经开始使用类似下面的内容,这些内容显然无效,然后卡在lambda和map函数之间。

for CCY in data.Underlying:
 data["new"] = mapp.loc[CCY].values[0]

上述操作不起作用,因为在分配新输入时数据[" new"]没有循环,因此在新创建的列中只添加了一个唯一值。 我正在寻找方法使其尽可能有效,因为我的数据库将非常大。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

关于预期的输出是什么不是很清楚,但一般来说你可以不用循环来映射

data['New'] = data['Underlying'].map(mapp['CCYs'])

    Underlying  Notional    New
0   AUDBRL      50,000      NaN
1   AUDCAD      100,000     NaN
2   AUDNZD      20,000      NaN
3   USDJPY      15,000      JPY
4   AUDKRW      12,000      KWAD