pandas.DataFrame.droplevel是否有相反的功能(如keeplevel)?

GoC*_*rry 2 python dataframe pandas

pandas.DataFrame.droplevel我可以使用级别名称或索引在某些位置保留多级索引/列的某些功能吗?

例:

df = pd.DataFrame([
        [1, 2, 3, 4],
        [5, 6, 7, 8],
        [9, 10, 11, 12],
        [13, 14, 15, 16]
    ], columns=['a','b','c','d']).set_index(['a','b','c']).T


a   1   5   9   13
b   2   6   10  14
c   3   7   11  15
d   4   8   12  16
Run Code Online (Sandbox Code Playgroud)

以下两个命令都可以返回以下数据帧:

df.droplevel(['a','b'], axis=1)
df.droplevel([0, 1], axis=1)

c   3   7   11  15
d   4   8   12  16
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个“ keeplevel”命令,以便以下两个命令都可以返回以下数据帧:

df.keeplevel(['a','b'], axis=1)
df.keeplevel([0, 1], axis=1)

a   1   5   9   13
b   2   6   10  14
d   4   8   12  16
Run Code Online (Sandbox Code Playgroud)

raf*_*elc 5

没有,keeplevel因为它是多余的:在一个封闭且定义明确的集中,当您定义要删除的内容时,您会自动定义要保留的内容

您可能会从拥有的东西和droplevel得到的回报中得到不同。

def keeplevel(df, levels, axis=1):
    return df.droplevel(df.axes[axis].droplevel(levels).names, axis=axis)
Run Code Online (Sandbox Code Playgroud)
>>> keeplevel(df, [0, 1])

a   1   5   9   13
b   2   6   10  14
d   4   8   12  16
Run Code Online (Sandbox Code Playgroud)