连接python表
我需要将两个表连接在一起: 例如: 表1连接python表,python,pandas,Python,Pandas,我需要将两个表连接在一起: 例如: 表1 index' (GBP, USD) (USD, RUB) etc... 2019-07-01 1.1 62 ... 2019-07-02 1.2 63 ... 2019-07-03 1.3 64 ... 表2 date pair 2019-07-01 GBP, USD 201
index' (GBP, USD) (USD, RUB) etc...
2019-07-01 1.1 62 ...
2019-07-02 1.2 63 ...
2019-07-03 1.3 64 ...
表2
date pair
2019-07-01 GBP, USD
2019-07-01 USD, RUB
2019-07-02 GBP, USD
2019-07-02 USD, RUB
目的是添加某种类型的联接,在表2中创建一个新列,显示表1中的速率
决赛
我尝试了一些pd.merge的变体,但可以得到我想要的。可能需要做些不同的事情?清理
这需要先进行一些清理tbl1
需要采用长格式,我们需要确保这些列是元组,而不是看起来像元组的字符串
fx = tbl1.stack().rename_axis(['date', 'pair']).reset_index(name='FX')
fx['pair'] = fx['pair'].str[1:-1].str.split(', ').map(tuple)
fx
date pair FX
0 2019-07-01 (GBP, USD) 1.1
1 2019-07-01 (USD, RUB) 62.0
2 2019-07-02 (GBP, USD) 1.2
3 2019-07-02 (USD, RUB) 63.0
4 2019-07-03 (GBP, USD) 1.3
5 2019-07-03 (USD, RUB) 64.0
tbl2 = tbl2.assign(pair=tbl2.pair.str.split(', ').map(tuple))
tbl2
pair
date
2019-07-01 (GBP, USD)
2019-07-01 (USD, RUB)
2019-07-02 (GBP, USD)
2019-07-02 (USD, RUB)
或者别管它,修复列
tbl1.columns = tbl1.columns.str[1:-1].str.split(', ').map(tuple)
tbl1
GBP USD
USD RUB
index
2019-07-01 1.1 62
2019-07-02 1.2 63
2019-07-03 1.3 64
tbl2
需要确保pair
列是元组,而不是看起来像元组的字符串
fx = tbl1.stack().rename_axis(['date', 'pair']).reset_index(name='FX')
fx['pair'] = fx['pair'].str[1:-1].str.split(', ').map(tuple)
fx
date pair FX
0 2019-07-01 (GBP, USD) 1.1
1 2019-07-01 (USD, RUB) 62.0
2 2019-07-02 (GBP, USD) 1.2
3 2019-07-02 (USD, RUB) 63.0
4 2019-07-03 (GBP, USD) 1.3
5 2019-07-03 (USD, RUB) 64.0
tbl2 = tbl2.assign(pair=tbl2.pair.str.split(', ').map(tuple))
tbl2
pair
date
2019-07-01 (GBP, USD)
2019-07-01 (USD, RUB)
2019-07-02 (GBP, USD)
2019-07-02 (USD, RUB)
查找
使用固定的tbl1
tbl2.assign(FX=tbl1.lookup(tbl2.index, tbl2.pair))
pair FX
date
2019-07-01 (GBP, USD) 1.1
2019-07-01 (USD, RUB) 62.0
2019-07-02 (GBP, USD) 1.2
2019-07-02 (USD, RUB) 63.0
pd.merge\u asof
使用长格式fx
pd.merge_asof(tbl2, fx, on='date', by='pair')
pair date FX
0 (GBP, USD) 2019-07-01 1.1
1 (USD, RUB) 2019-07-01 62.0
2 (GBP, USD) 2019-07-02 1.2
3 (USD, RUB) 2019-07-02 63.0
帮个大忙!但在第一部分,当我将getfx列作为元组时,我得到一个错误“float”对象是不可编辑的。我想它不喜欢浮点数吧?