【问题标题】:filering on level 2 of a multindex panda过滤多索引熊猫的第 2 级
【发布时间】:2017-06-03 06:22:40
【问题描述】:

我有一个 2 级数据框

occupation     gender
administrator  F         0.455696
               M         0.544304
artist         F         0.464286
               M         0.535714
doctor         M         1.000000
educator       F         0.273684
               M         0.726316
engineer       F         0.029851
               M         0.970149

我想在级别 2 上提交,这意味着我想过滤性别以提取有关女性的所有数据。

我的尝试是:

df.loc[(slice(None),"F"),:]

但它没有任何效果,这意味着它返回了一个显示两种性别的未过滤数据框。

关于如何做到这一点的任何提示? 提前谢谢

【问题讨论】:

    标签: python dataframe filtering


    【解决方案1】:

    你有一个系列,而不是一个数据框,试试:

    df.loc[(slice(None),"F")]
    

    或者你可以将其转换为数据框,然后使用数据框语法:

    df.to_frame().loc[(slice(None),"F"), :]
    

    【讨论】:

    • 我真是个笨蛋!!!谢谢大佬,完美运行。当然,更简单的解决方案是重置索引。但我觉得这会浪费内存。我对吗?我们应该可以直接对索引进行操作,而不是重新设置。
    • 当然。如果您不需要数据框,系列语法将是更好的方法。答案是试图在这里显示差异。
    【解决方案2】:

    在 df 上应用 reset_index() 然后切片

    df = df.reset_index()
    df[df['gender']== 'F']
    

    【讨论】:

    • 是的,当然,这是一个简单的解决方案,但我一直在寻找直接作用于索引的解决方案,因为否则我觉得一直设置和重置索引会浪费内存。但我不确定我所说的是否正确。
    • 确实如此。我通常会在绘图时使用 reset_index :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    • 2015-05-28
    • 1970-01-01
    • 2019-05-03
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    相关资源
    最近更新 更多