Pandas 多索引数据框删除行
Pandas Multiindex dataframe remove rows
我有如下 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
我可以做得更好吗?
您正在寻找.xs:
df.xs('a', axis=0, level=0, drop_level=False)
给出:
col
i1 i2
a c 5
d 6
一种方法是使用 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
你可以只使用 loc
:
df.loc[['a']]
结果输出:
col
i1 i2
a c 5
d 6
我有如下 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
我可以做得更好吗?
您正在寻找.xs:
df.xs('a', axis=0, level=0, drop_level=False)
给出:
col
i1 i2
a c 5
d 6
一种方法是使用 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
你可以只使用 loc
:
df.loc[['a']]
结果输出:
col
i1 i2
a c 5
d 6