Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 多索引数据帧删除行_Python_Pandas_Multi Index - Fatal编程技术网

Python 多索引数据帧删除行

Python 多索引数据帧删除行,python,pandas,multi-index,Python,Pandas,Multi Index,我的多重指数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

我的多重指数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_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
我能做得更好吗?

您正在寻找:

其中:

       col
i1 i2     
a  c     5
   d     6

一种方法是使用
index
方法
get\u level\u values()


您可以使用
loc

df.loc[['a']]
结果输出:

       col
i1 i2     
a  c     5
   d     6

让我们使用
slice

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

       col
i1 i2     
a  c     5
   d     6

另外,如果希望保留索引级别0,可以指定
drop_level=False
如果我想保留的不仅仅是'a'(例如保留'a'和'b')。使用'level'参数可以找到更干净的解决方案的可能副本:df=df[df.index.isin(idx_to_keep,level=0)]
       col
i1 i2     
a  c     5
   d     6
idx_to_keep = ['a']
df.loc[slice(*idx_to_keep,)]
       col
i1 i2     
a  c     5
   d     6