Python如何从另一个数据帧中获取一个数据帧中的值

时间:2016-11-22 04:37:45

标签: python date pandas dataframe

import pandas as pd
import numpy as np

df1=pd.DataFrame(np.arange(25).reshape((5,5)),index=pd.date_range('2015/01/01',periods=5,freq='D')))  
df1['trading_signal']=[1,-1,1,-1,1]

DF1

             0   1   2   3   4  trading_signal
2015-01-01   0   1   2   3   4         1
2015-01-02   5   6   7   8   9        -1
2015-01-03  10  11  12  13  14         1
2015-01-04  15  16  17  18  19        -1
2015-01-05  20  21  22  23  24         1

和 df2

                      0   1   2   3   4  
Date       Time                                        
2015-01-01 22:55:00   0   1   2   3   4             
           23:55:00   5   6   7   8   9               
2015-01-02 00:55:00  10  11  12  13  14               
           01:55:00  15  16  17  18  19               
           02:55:00  20  21  22  23  24  

如何从df1获取trading_signal的值并将其发送到df2。 我想要一个像这样的输出:

                      0   1   2   3   4  trading_signal
Date       Time                                        
2015-01-01 22:55:00   0   1   2   3   4          1    
           23:55:00   5   6   7   8   9          1     
2015-01-02 00:55:00  10  11  12  13  14         -1     
           01:55:00  15  16  17  18  19         -1   
           02:55:00  20  21  22  23  24         -1

1 个答案:

答案 0 :(得分:1)

您需要合并或加入。如果你合并,你需要reset_index,这比使用join更慢,内存效率更低。请阅读Joining a single index to a multi index上的文档:

  

版本0.14.0中的新功能。

     

您可以加入单个索引的DataFrame,其级别为a   多索引DataFrame。级别将匹配索引的名称   单索引帧与多索引的级别名称的关系   帧

如果要使用连接,则必须将df1的索引命名为Date,以使其与第一级df2的名称相匹配:

df1.index.names = ['Date']
df1[['trading_signal']].join(df2, how='right')


                     trading_signal   0   1   2   3   4
Date       Time                                        
2015-01-01 22:55:00               1   0   1   2   3   4
           23:55:00               1   5   6   7   8   9
2015-01-02 00:55:00              -1  10  11  12  13  14
           01:55:00              -1  15  16  17  18  19
           02:55:00              -1  20  21  22  23  24

我有正当理由加入,如果你不明白这意味着什么,请阅读Brief primer on merge methods (relational algebra)