python - Rename level in multiindex/multilevel Pandas DataFrame -
i have dataframe
this:
arrays = [np.array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux']), np.array(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']), np.array(['2016-01', '2016-02', '2016-01', '2016-02', '2016-01', '2016-02', '2016-01', '2016-02'])] df = pd.dataframe(np.ceil(np.random.randn(8, 4)), index=arrays) df.rename(columns={0:'m1',1:'m2',2:'m3',3:'m4'},inplace=true) m1 m2 m3 m4 bar 1 2016-01 -0.0 1.0 3.0 2.0 2 2016-02 1.0 1.0 1.0 2.0 baz 1 2016-01 -1.0 -1.0 2.0 1.0 2 2016-02 1.0 2.0 1.0 2.0 foo 1 2016-01 1.0 -0.0 -0.0 -0.0 2 2016-02 -2.0 -0.0 -0.0 -0.0 qux 1 2016-01 -0.0 -0.0 -1.0 1.0 2 2016-02 -0.0 -0.0 1.0 -0.0
let's want replace 2016 2017 in column name m2 , m4 2016 rows have values m1 , m3 not m2 , m4. , 2017 rows have values m2 , m4 not m1 , m3. similar dataframe
:
m1 m2 m3 m4 bar 1 2016-01 -0.0 0.0 3.0 0.0 2 2016-02 1.0 0.0 1.0 0.0 1 2017-01 0.0 1.0 0.0 2.0 2 2017-02 0.0 1.0 0.0 2.0 baz 1 2016-01 -1.0 0.0 2.0 0.0 2 2016-02 1.0 0.0 1.0 0.0 1 2017-01 0.0 -1.0 0.0 1.0 2 2017-02 0.0 2.0 0.0 2.0
i've tried unstack()
dataframe , rename each column doesn't seem work , i'm not sure why.
df = df.unstack() df.unstack()['m2'] = df.unstack()['m2'].rename(columns = lambda t: t.replace('2016','2017'))
import numpy np import pandas pd np.random.seed(2017) arrays = [np.array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux']), np.array(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']), np.array(['2016-01', '2016-02', '2016-01', '2016-02', '2016-01', '2016-02', '2016-01', '2016-02'])] df = pd.dataframe(np.ceil(np.random.randn(8, 4)), index=arrays) df.rename(columns={0:'m1',1:'m2',2:'m3',3:'m4'},inplace=true) df2 = df[['m2', 'm4']] df2.index = pd.multiindex.from_arrays( [df.index.get_level_values(i) in [0,1]] + [df.index.get_level_values(-1).str.replace('2016','2017')]) result = pd.concat([df[['m1','m3']], df2], axis=0).fillna(0) result = result.sort_index(level=[0,2,1]) print(result)
converts
m1 m2 m3 m4 bar 1 2016-01 -1.0 -0.0 1.0 1.0 2 2016-02 -0.0 -0.0 -0.0 -0.0 baz 1 2016-01 1.0 -0.0 -1.0 -0.0 2 2016-02 -1.0 1.0 1.0 -0.0 foo 1 2016-01 -0.0 -0.0 -1.0 -1.0 2 2016-02 2.0 -0.0 -0.0 -0.0 qux 1 2016-01 1.0 2.0 -0.0 2.0 2 2016-02 1.0 1.0 -0.0 -0.0
into
m1 m2 m3 m4 bar 1 2016-01 -1.0 0.0 1.0 0.0 2 2016-02 -0.0 0.0 -0.0 0.0 1 2017-01 0.0 -0.0 0.0 1.0 2 2017-02 0.0 -0.0 0.0 -0.0 baz 1 2016-01 1.0 0.0 -1.0 0.0 2 2016-02 -1.0 0.0 1.0 0.0 1 2017-01 0.0 -0.0 0.0 -0.0 2 2017-02 0.0 1.0 0.0 -0.0 foo 1 2016-01 -0.0 0.0 -1.0 0.0 2 2016-02 2.0 0.0 -0.0 0.0 1 2017-01 0.0 -0.0 0.0 -1.0 2 2017-02 0.0 -0.0 0.0 -0.0 qux 1 2016-01 1.0 0.0 -0.0 0.0 2 2016-02 1.0 0.0 -0.0 0.0 1 2017-01 0.0 2.0 0.0 2.0 2 2017-02 0.0 1.0 0.0 -0.0
Comments
Post a Comment