Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

python/pandas: how to combine two dataframes into one with hierarchical column index?

Tags:

python

pandas

I have two dataframes which look like this:

>>> df1               A    B 2000-01-01  1.4  1.4 2000-01-02  1.7 -1.9 2000-01-03 -0.2 -0.8  >>> df2               A    B 2000-01-01  0.6 -0.3 2000-01-02 -0.4  0.6 2000-01-03  1.1 -1.0 

How can I make one dataframe out of this two with hierarchical column index like below?

            df1       df2               A    B    A    B 2000-01-01  1.4  1.4  0.6 -0.3 2000-01-02  1.7 -1.9 -0.4  0.6 2000-01-03 -0.2 -0.8  1.1 -1.0 
like image 556
behzad.nouri Avatar asked Apr 13 '13 15:04

behzad.nouri


People also ask

How do I combine two DataFrames in pandas?

The concat() function in pandas is used to append either columns or rows from one DataFrame to another. The concat() function does all the heavy lifting of performing concatenation operations along an axis while performing optional set logic (union or intersection) of the indexes (if any) on the other axes.

How do I merge two DataFrames in Python with different column names?

Different column names are specified for merges in Pandas using the “left_on” and “right_on” parameters, instead of using only the “on” parameter. Merging dataframes with different names for the joining variable is achieved using the left_on and right_on arguments to the pandas merge function.


1 Answers

This is a doc example: http://pandas.pydata.org/pandas-docs/stable/merging.html#more-concatenating-with-group-keys

In [9]: df1 = pd.DataFrame(np.random.randn(3,2),columns=list('AB'),index=pd.date_range('20000101',periods=3))  In [10]: df2 = pd.DataFrame(np.random.randn(3,2),columns=list('AB'),index=pd.date_range('20000101',periods=3))  In [11]: df1 Out[11]:                     A         B 2000-01-01  0.129994  1.189608 2000-01-02 -1.126812  1.087617 2000-01-03 -0.930070  0.253098  In [12]: df2 Out[12]:                     A         B 2000-01-01  0.535700 -0.769533 2000-01-02 -1.698531 -0.456667 2000-01-03  0.451622 -1.500175  In [13]: pd.concat(dict(df1 = df1, df2 = df2),axis=1) Out[13]:                   df1                 df2                              A         B         A         B 2000-01-01  0.129994  1.189608  0.535700 -0.769533 2000-01-02 -1.126812  1.087617 -1.698531 -0.456667 2000-01-03 -0.930070  0.253098  0.451622 -1.500175 
like image 61
Jeff Avatar answered Sep 19 '22 13:09

Jeff