'Shuffle Columns in Dataframe

I want to shuffle columns without order; completely pseudo-randomly, on one line of code.

Before:

  A B
0 1 2
1 1 2

After:

  B A
0 2 1
1 2 1

My attempts so far:

df = df.reindex(columns=columns)

df.sample(frac=1, axis=1)

df.apply(np.random.shuffle, axis=1)


Solution 1:[1]

Use DataFrame.sample with the axis argument set to columns (1):

df = df.sample(frac=1, axis=1)
print(df)
   B  A
0  2  1
1  2  1

Or use Series.sample with columns converted to Series and change order of columns by subset:

df = df[df.columns.to_series().sample(frac=1)]
print(df)
   B  A
0  2  1
1  2  1

Solution 2:[2]

Use numpy.random.permutation with list of column names.

df = df[np.random.permutation(df.columns)]

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Henry Ecker
Solution 2