删除每个索引的多索引熊猫数据帧的最低五个值

Posted

技术标签:

【中文标题】删除每个索引的多索引熊猫数据帧的最低五个值【英文标题】:Drop lowest five values of multiindex pandas dataframe per index 【发布时间】:2022-01-07 22:29:16 【问题描述】:

我有一个 pandas 多索引数据框,其中包含美国每年和各州的大量数据。我想删除每个州每年 age 列中的五个最低值。

                     ID    age   ...    BMI     
Year   State                                                          
2001.0 ALASKA      1194.0  97.0  ...  20.19880
       ALASKA      1196.0  72.0  ...  27.78515
       ALASKA      1198.0  17.0  ...  19.61245
       ALASKA      1195.0  19.0  ...  26.81935
       ALASKA      1190.0  45.0  ...  29.87964
                                 ...
2019.0 ALASKA      1621.0  94.0  ...  22.87767
       ALASKA      1622.0  79.0  ...  29.80623
       ALASKA      1624.0  24.0  ...  25.12029
       ALASKA      1626.0  12.0  ...  20.15703
       ALASKA      1641.0  63.0  ...  27.47901

如何删除每年和每个州的年龄列中的每 5 个最低值?

【问题讨论】:

已删除,抱歉。 【参考方案1】:

你可以试试:

df = df.reset_index()
df = df.drop(
    df.groupby(["Year", "State"]).age.nsmallest(5).index.get_level_values(2)
).set_index(["Year", "State"], drop=True)

【讨论】:

【参考方案2】:

我不知道这是否是最有效的,但解决方案可能是(df 是您的 DataFrame):

import pandas as pd

pd.concat([y.sort_values(by="age").iloc[5:,:] for _, y in df.groupby(df.index)])

【讨论】:

以上是关于删除每个索引的多索引熊猫数据帧的最低五个值的主要内容,如果未能解决你的问题,请参考以下文章

将熊猫多索引切片彼此分开

在熊猫多索引数据框中返回满足逻辑索引条件的每个组的最后一行[重复]

将值从一个数据帧切片复制到另一个:使用“IndexSlice”的多索引熊猫数据帧的切片是不是总是一致地排序?

如何将多索引列转换为熊猫数据框的单索引列?

插值多索引熊猫数据框

熊猫数据框检查索引是不是存在于多索引中