多重索引
with pd.option_context('display.multi_sparse', False):
pass
tuples = list(zip(['bar','bar','baz','baz','foo','foo','qux','qux'],['one','two','one','two','one','two','one','two']))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
arrays = [['bar','bar','baz','baz','foo','foo','qux','qux'],['one','two','one','two','one','two','one','two']]
index = pd.MultiIndex.from_arrays(arrays, names = ['first', 'second'])
iterable = [['bar', 'baz', 'foo', 'qux'], ['one', 'two']]
index = pd.MultiIndex.from_product(iterable , names=['first', 'second'])
df = pd.DataFrame(np.arrays(['bar','one'],['bar','two'],['baz','one'],['baz','two'],['foo','one'],['foo','two'],['qux','one'],['qux','two']),columns=['first','second'])
index = pd.MultiIndex.from_frame(df)
index= [['bar','bar','baz','baz','foo','foo','qux','qux'],['one','two','one','two','one','two','one','two']]
df = pd.DataFrame(np.random.randn(8,2), index=index, columns=['A', 'B']])
index.get_level_values(0)
index.get_level_values('first')
df['bar']
df['bar']['one']
df['bar', 'one']
df[['bar','bar']]
df.loc['bar']
df.loc['bar'].loc['one']
df.loc[('bar', 'one')]
df.loc[['bar','baz']]
df = df.T
1.在索引时,一个元组被识别为一个多层级的索引值,元组中的各元素是递进关系,如(第一层索引值,第二层索引值)
2.在索引时,一个列表被识别为多个不同的索引值,列表中的各元素是并列关系,如[一个索引,另一个索引]
df.loc[[('A','a'), ('B','b')]]
df.loc[(['A','B'], ['a','b'])]
slice('A','B')相当于A:B
slice(None)相当于:
df.loc[(slice('A', 'B'), slice(None), slice('C1','C3'))]
df.loc(axis=1)[(slice('A', 'B'), slice(None), slice('C1','C3'))]
df.loc[pd.IndexSlice[:, :, ['C1', 'C3']]]
df.loc(axis=1)[pd.IndexSlice[:,:,['C1','C3']]]
df.xs('a', level='second') 等同于 df.xs('a', level=1, axis=0)
df = df.T
df.xs('a', level='second') 等同于 df.xs('a', level=1, axis=1)
df.xs('a', level='second') 等同于 df.xs(['a','A'), level=(0,1), axis=0)
df.xs('a', level='second') 等同于 df.xs('a', level=1, dorp_level=True)
df.swaplevel(0, 1, axis=0)
df.reorder_levels([1, 0], axis=0)
df.sort_index(level=1)
df.sort_index(level='second')
df.sort_index(level=0,axis=1)
df.set_index(['col1','col2'])
df.index.is_lexsorted()
df.index.lexsort_depth
df.rename(columns={0:'col0', 1:'col1'})
df.rename(index={'one':'1', 'two','2'})
df.rename_axis(index=['abc', 'def'])
df.rename_axis(columns=['cols'])
s = pd.Series(np.random.randn(8,2), index=index)
s['bar']
df.columns.levels
df[['foo','qux']].columns.levels
new_df = df[['foo','qux']].columns.remove_unused_levels()
s + s[:-2]
s + s[::2]
s.reindex(index[:-2]) + s[:-2]
s.reindex(index[::2]) + s[::2]
s.reindex(index[:-2]) + s[:-2] 等同于 s[:-2] + s.reindex(index[:-2])
s.reindex(index[::2]) + s[::2] 等同于 s[::2] + s.reindex(index[::2])