一种重新格式化并将一个pandas数据帧写入另一个的方法

时间:2016-04-23 20:28:27

标签: python python-3.x pandas

我有两个数据框,我想加入。

第一个数据框(stockData)有多个股票(以下仅用于说明目的)并具有以下结构:

                           BBG.XLON.VOD.S_LAST  BBG.XLON.VOD.S_VOLUME  BBG.XLON.VOD.S_MKTCAP  
date                                                                           
2001-01-02                  NaN                    NaN                    NaN  
2001-01-03               225.00              444328736            145216.0020  
2001-01-04               239.00              488568000            154251.6643  
2001-01-05               242.25              237936704            156349.2288  
2001-01-08               227.75              658059776            146990.8642  

BBG.XLON.BTA.S_LAST  BBG.XLON.BTA.S_VOLUME  BBG.XLON.BTA.S_MKTCAP  \
date                                                                            
2001-01-02                  572               26605510               37494.60   
2001-01-03                  560               24715470               36708.00   
2001-01-04                  613               52781855               40182.15   
2001-01-05                  630               56600152               41296.50   
2001-01-08                  633               41014402               41493.15  

并且第二个数据框(reportingData)再次拥有更多不同股票的数据,如下所示:

           unique_stock_id reporting_type
date                                     
2001-01-03  BBG.XLON.VOD.S         2014:A
2001-01-03  BBG.XLON.VOD.S         2014:S2
2001-01-05  BBG.XLON.BTA.S         2014:A

有没有办法返回匹配所有股票的结果数据框:

            BBG.XLON.VOD.S_LAST  BBG.XLON.VOD.S_VOLUME  BBG.XLON.VOD.S_MKTCAP  BBG.XLON.VOD.S_REPORTING    
date                                                                           
2001-01-02                  NaN                    NaN                    NaN                       NaN    
2001-01-03               225.00              444328736            145216.0020                   2014:S2
2001-01-04               239.00              488568000            154251.6643                       NaN    
2001-01-05               242.25              237936704            156349.2288                       NaN    
2001-01-08               227.75              658059776            146990.8642                       NaN    

            BBG.XLON.BTA.S_LAST  BBG.XLON.BTA.S_VOLUME  BBG.XLON.BTA.S_MKTCAP  BBG.XLON.BTA.S_REPORTING    \
date                                                                            
2001-01-02                  572               26605510               37494.60                       NaN    
2001-01-03                  560               24715470               36708.00                       NaN    
2001-01-04                  613               52781855               40182.15                       NaN    
2001-01-05                  630               56600152               41296.50                    2014:A

非常感谢任何帮助

1 个答案:

答案 0 :(得分:1)

你可以这样做:

In [316]: df1.join(df2['reporting_type'].groupby(level=0).first())
Out[316]:
            BBG.XLON.VOD.S_LAST  BBG.XLON.VOD.S_VOLUME  BBG.XLON.VOD.S_MKTCAP  \
2001-01-02                  NaN                    NaN                    NaN
2001-01-03               225.00            444328736.0            145216.0020
2001-01-04               239.00            488568000.0            154251.6643
2001-01-05               242.25            237936704.0            156349.2288
2001-01-08               227.75            658059776.0            146990.8642

           reporting_type
2001-01-02            NaN
2001-01-03         2014:A
2001-01-04            NaN
2001-01-05            NaN
2001-01-08            NaN

首先按索引对df2进行分组,然后为每个reporting_type

选取date的第一个值