Pandas Multiindex数据帧删除行

时间:2017-07-26 17:38:24

标签: python pandas multi-index

我有Multiiindex DF如下:

tuples = list(zip(*[['a', 'a', 'b', 'b'], ['c', 'd', 'c', 'd']]))
index = pd.MultiIndex.from_tuples(tuples, names=['i1', 'i2'])
df = pd.DataFrame([5, 6, 7, 8], index=index[:4], columns=['col'])

       col
i1 i2     
a  c     5
   d     6
b  c     7
   d     8

希望保留索引(级别0)在

中的行
idx_to_keep = ['a']

应该是一项简单的任务,但除了

之外,我无法想到任何其他方式
idx_to_drop = np.setdiff1d(pd.unique(df.index.levels[0]), idx_to_keep)
df.drop(idx_to_drop, inplace = True)

       col
i1 i2     
a  c     5
   d     6

我可以做得更好吗?

4 个答案:

答案 0 :(得分:2)

您正在寻找.xs

df.xs('a', axis=0, level=0, drop_level=False)

给出了:

       col
i1 i2     
a  c     5
   d     6

答案 1 :(得分:2)

一种方法是使用index方法get_level_values()

df
       col
i1 i2     
a  c     5
   d     6
b  c     7
   d     8

df[df.index.get_level_values(0).isin(idx_to_keep)]
       col
i1 i2     
a  c     5
   d     6

答案 2 :(得分:2)

您可以使用loc

df.loc[['a']]

结果输出:

       col
i1 i2     
a  c     5
   d     6

答案 3 :(得分:0)

让我们使用slice

idx_to_keep = ['a']
df.loc[slice(*idx_to_keep,)]

输出:

       col
i1 i2     
a  c     5
   d     6