Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to simply add a column level to a pandas dataframe

let say I have a dataframe that looks like this:

df = pd.DataFrame(index=list('abcde'), data={'A': range(5), 'B': range(5)})  df Out[92]:     A  B a  0  0 b  1  1 c  2  2 d  3  3 e  4  4 

Asumming that this dataframe already exist, how can I simply add a level 'C' to the column index so I get this:

 df Out[92]:     A  B    C  C a  0  0 b  1  1 c  2  2 d  3  3 e  4  4 

I saw SO anwser like this python/pandas: how to combine two dataframes into one with hierarchical column index? but this concat different dataframe instead of adding a column level to an already existing dataframe.

-

like image 814
Steven G Avatar asked Oct 24 '16 19:10

Steven G


People also ask

How do you add a column value to a DataFrame?

You can use the assign() function to add a new column to the end of a pandas DataFrame: df = df. assign(col_name=[value1, value2, value3, ...])

How do you make a multilevel column in pandas?

You can use concat . Give it a dictionary of dataframes where the key is the new column level you want to add. You can use the same technique to create multiple levels. simple and elegant!

How do I add columns to a DataFrame in Python?

In pandas you can add/append a new column to the existing DataFrame using DataFrame. insert() method, this method updates the existing DataFrame with a new column. DataFrame. assign() is also used to insert a new column however, this method returns a new Dataframe after adding a new column.


Video Answer


2 Answers

As suggested by @StevenG himself, a better answer:

df.columns = pd.MultiIndex.from_product([df.columns, ['C']])  print(df) #    A  B #    C  C # a  0  0 # b  1  1 # c  2  2 # d  3  3 # e  4  4 
like image 179
Romain Avatar answered Sep 21 '22 16:09

Romain


option 1
set_index and T

df.T.set_index(np.repeat('C', df.shape[1]), append=True).T 

option 2
pd.concat, keys, and swaplevel

pd.concat([df], axis=1, keys=['C']).swaplevel(0, 1, 1) 

enter image description here

like image 45
piRSquared Avatar answered Sep 21 '22 16:09

piRSquared