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

标签 python pandas dataframe

是否有 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

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

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

c   3   7   11  15
d   4   8   12  16

我正在寻找一个“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

最佳答案

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

您可能会从您所拥有的和 droplevel 返回的内容中得到不同之处。

def keeplevel(df, levels, axis=1):
    return df.droplevel(df.axes[axis].droplevel(levels).names, axis=axis)

>>> keeplevel(df, [0, 1])

a   1   5   9   13
b   2   6   10  14
d   4   8   12  16

关于python - pandas.DataFrame.droplevel(如keeplevel)是否有相反的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58065223/

相关文章:

python - 将 pandas 列从 15 年 4 月 3 天的字符串转换为 15.3 年

python - 通过应用一些字符串格式将数据帧的字符串(对象)列转换为数字

pandas - 属性错误: 'StructType' object has no attribute 'encode'

python - 在 python 中查找相似项目的最佳方法

Python strip() 不适用于新行

python - 如何在 Visual Studio IronPython 项目中配置导入路径

python - 有没有办法以列表格式填充数据框中的缺失值作为上一行列表的最后一个值?

python - 在 Pandas Dataframe 的几列上填写 na

python - 包含列表的 Pandas 数据框列,获取两个连续行的交集

python - pandas中大数据集的数据准备