Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
连接python表_Python_Pandas - Fatal编程技术网

连接python表

连接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

我需要将两个表连接在一起:

例如:

表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    
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”对象是不可编辑的。我想它不喜欢浮点数吧?