Tom
Tom

Reputation: 43

faster way to convert single-index df to multiindex (columns become index)

I need a faster way to convert a standard 2d dataframe with multiple columns into a multiindex dataframe with only a single column -- please see example below.

For large datasets, the below method takes several minutes to run. I imagine there's a better way; any help appreciated.

cols = ['Tom','Jerry']
data_ = [['Level 58','Level 10'],['Level 59','Level 14'],['Level 60','Level 18']]
idx = pd.Index([datetime(2022,1,1), datetime(2022,1,2), datetime(2022,1,3)])
df = pd.DataFrame(data = data_, columns = cols, index=idx)
              Tom              Jerry
2022-01-01    Level 58         Level 10
2022-01-02    Level 59         Level 14
2022-01-03    Level 60         Level 18
pd.concat( \
  [pd.DataFrame(df[[i]].values, \
    index=pd.MultiIndex.from_tuples([(df[[i]].columns[0], x) for x in df.index], \
     names = ['name', 'date'])) \
       for i in df.columns])

                             0
name           date     
Tom      2022-01-01    Level 58
         2022-01-02    Level 59
         2022-01-03    Level 60
Jerry    2022-01-01    Level 10
         2022-01-02    Level 14
         2022-01-03    Level 18

Screenshot of current method outputs

Upvotes: 2

Views: 507

Answers (1)

BENY
BENY

Reputation: 323226

Try with unstack

out = df.unstack()#.to_frame('col')

Upvotes: 2

Related Questions