How to simply add a column level to a pandas dataframe
Another way for MultiIndex (appanding 'E'
):
df.columns = pd.MultiIndex.from_tuples(map(lambda x: (x[0], 'E', x[1]), df.columns))
A B
E E
C D
a 0 0
b 1 1
c 2 2
d 3 3
e 4 4
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
A solution which adds a name to the new level and is easier on the eyes than other answers already presented:
df['newlevel'] = 'C'
df = df.set_index('newlevel', append=True).unstack('newlevel')
print(df)
# A B
# newlevel C C
# a 0 0
# b 1 1
# c 2 2
# d 3 3
# e 4 4
option 1set_index
and T
df.T.set_index(np.repeat('C', df.shape[1]), append=True).T
option 2pd.concat
, keys
, and swaplevel
pd.concat([df], axis=1, keys=['C']).swaplevel(0, 1, 1)