I think this will do it
In [3]: df = DataFrame(dict(A = 'foo', B = 'bar', value = 1),index=range(5)).set_index(['A','B'])
In [4]: df
Out[4]:
value
A B
foo bar 1
bar 1
bar 1
bar 1
bar 1
In [5]: df.to_csv('test.csv')
In [6]: !cat test.csv
A,B,value
foo,bar,1
foo,bar,1
foo,bar,1
foo,bar,1
foo,bar,1
In [7]: pd.read_csv('test.csv',index_col=[0,1])
Out[7]:
value
A B
foo bar 1
bar 1
bar 1
bar 1
bar 1
To write with the index duplication (kind of a hack though)
In [27]: x = df.reset_index()
In [28]: mask = df.index.to_series().duplicated()
In [29]: mask
Out[29]:
A B
foo bar False
bar True
bar True
bar True
bar True
dtype: bool
In [30]: x.loc[mask.values,['A','B']] = ''
In [31]: x
Out[31]:
A B value
0 foo bar 1
1 1
2 1
3 1
4 1
In [32]: x.to_csv('test.csv')
In [33]: !cat test.csv
,A,B,value
0,foo,bar,1
1,,,1
2,,,1
3,,,1
4,,,1
Read back is a bit tricky actually
In [37]: pd.read_csv('test.csv',index_col=0).ffill().set_index(['A','B'])
Out[37]:
value
A B
foo bar 1
bar 1
bar 1
bar 1
bar 1
tupleize_cols
is for a multi-index on columns (its coming in 0.12); prob justreset_index().set_index(['idxa','idxb']).to_csv()
is your best bet (the specifyindex_col=['idxa','idxb']
on read-back – Moslemism