【发布时间】:2016-10-15 17:25:39
【问题描述】:
我经常将数据框特定级别的值作为我应该做什么的指南。在这种情况下,我使用pd.IndexSlice 对数据框进行切片并引用生成的数据框的索引。问题是生成的数据帧的索引与原始索引相同。我需要它是原始索引的子集,它尊重我制作的切片。
设置
import pandas as pd
def produce_df(rows, columns, row_names=None, column_names=None):
"""rows is a list of lists that will be used to build a MultiIndex
columns is a list of lists that will be used to build a MultiIndex"""
row_index = pd.MultiIndex.from_product(rows, names=row_names)
col_index = pd.MultiIndex.from_product(columns, names=column_names)
return pd.DataFrame(index=row_index, columns=col_index)
df = produce_df([['a', 'b'], ['c', 'd']], [['1', '2'], ['3', '4']],
row_names=['alpha1', 'alpha2'], column_names=['number1', 'number2'])
print df
number1 1 2
number2 3 4 3 4
alpha1 alpha2
a c NaN NaN NaN NaN
d NaN NaN NaN NaN
b c NaN NaN NaN NaN
d NaN NaN NaN NaN
索引如下:
print df.index
MultiIndex(levels=[[u'a', u'b'], [u'c', u'd']],
labels=[[0, 0, 1, 1], [0, 1, 0, 1]],
names=[u'alpha1', u'alpha2'])
然后我切片:
islc = pd.IndexSlice[['a'], :]
df2 = df.loc[islc, :]
print df2
number1 1 2
number2 3 4 3 4
alpha1 alpha2
a c NaN NaN NaN NaN
d NaN NaN NaN NaN
这是预期的切片。索引是什么样的:
MultiIndex(levels=[[u'a', u'b'], [u'c', u'd']],
labels=[[0, 0], [0, 1]],
names=[u'alpha1', u'alpha2'])
df.index.levels[0] 里面还有'b'。
问题:如何在切片后重置MultiIndex。
【问题讨论】:
标签: python pandas slice multi-index