Question Details

No question body available.

Tags

python pandas dataframe

Answers (1)

March 2, 2026 Score: 2 Rep: 267,453 Quality: Medium Completeness: 80%

An easy approach would be to use pipe+setaxis:

df.pipe(
    lambda df: df.setaxis(
        [str(x[0]) + '' + str(x[1]) for x in df.columns], axis=1
    )
)

Output:

   1red  1blue  2red  2blue
0     10      20     30      40
1     50      60     70      80

For a generic approach (independent of the number of levels):

def flattencolumns(df, sep=''):
    cols = df.columns.toframe().astype(str).agg(sep.join, axis=1).tolist()
    return df.setaxis(cols, axis=1)

df.pipe(flattencolumns)

And even more generic, handling any axis:

def flattenlevels(df, sep='', axis=1):
    vals = (
        df.axes[axis].toframe().astype(str).agg(''.join, axis=1).tolist()
    )
    return df.setaxis(vals, axis=axis)

df.pipe(flattenlevels)

1red 1blue 2red 2blue

lvl0 lvl1

1 A 10 20 30 40

B 50 60 70 80

df.pipe(flatten
levels, axis=0)

number 1 2

color red blue red blue

1A 10 20 30 40

1B 50 60 70 80