nickponline
nickponline

Reputation: 25914

How do I stack two DataFrames next to each other in Pandas?

I have two sets of stock data in DataFrames:

> GOOG.head()
           Open   High    Low 
Date                                                                            
2011-01-03  21.01  21.05  20.78 
2011-01-04  21.12  21.20  21.05 
2011-01-05  21.19  21.21  20.90 
2011-01-06  20.67  20.82  20.55 
2011-01-07  20.71  20.77  20.27

AAPL.head()
              Open    High     Low
Date                              
2011-01-03  596.48  605.59  596.48
2011-01-04  605.62  606.18  600.12
2011-01-05  600.07  610.33  600.05
2011-01-06  610.68  618.43  610.05
2011-01-07  615.91  618.25  610.13

and I would like to stack them next two each other in a single DataFrame so I can access and compare columns (e.g. High) across stocks (GOOG vs. AAPL)? What is the best way to do this in Pandas and access the subsequent columns (e.g. GOOG's High column and AAPL's High column). Thanks!

Upvotes: 10

Views: 12475

Answers (2)

Wouter Overmeire
Wouter Overmeire

Reputation: 69116

pd.concat is also an option

In [17]: pd.concat([GOOG, AAPL], keys=['GOOG', 'AAPL'], axis=1)
Out[17]:
             GOOG                  AAPL
             Open   High    Low    Open    High     Low
Date
2011-01-03  21.01  21.05  20.78  596.48  605.59  596.48
2011-01-04  21.12  21.20  21.05  605.62  606.18  600.12
2011-01-05  21.19  21.21  20.90  600.07  610.33  600.05
2011-01-06  20.67  20.82  20.55  610.68  618.43  610.05
2011-01-07  20.71  20.77  20.27  615.91  618.25  610.13

Upvotes: 12

BrenBarn
BrenBarn

Reputation: 251353

Have a look at the join method of dataframes, use the lsuffix and rsuffix attributes to create new names for the joined columns. It works like this:

>>> x
          A         B         C
0  0.838119 -1.116730  0.167998
1 -1.143761  0.051970  0.216113
2 -0.614441  0.208978 -0.630988
3  0.114902 -0.248791 -0.503172
4  0.836523 -0.802074  1.478333
>>> y
          A         B         C
0 -0.455859 -0.488645 -1.618088
1 -2.295255  0.524681  1.021320
2 -0.484612  1.101463 -0.081476
3 -0.475076  0.915797 -0.998777
4 -0.847538  0.057044  1.053533
>>> x.join(y, lsuffix="_x", rsuffix="_y")
        A_x       B_x       C_x       A_y       B_y       C_y
0  0.838119 -1.116730  0.167998 -0.455859 -0.488645 -1.618088
1 -1.143761  0.051970  0.216113 -2.295255  0.524681  1.021320
2 -0.614441  0.208978 -0.630988 -0.484612  1.101463 -0.081476
3  0.114902 -0.248791 -0.503172 -0.475076  0.915797 -0.998777
4  0.836523 -0.802074  1.478333 -0.847538  0.057044  1.053533

Upvotes: 4

Related Questions