每个索引删除 multiindex pandas 数据帧的最低五个值

Drop lowest five values of multiindex pandas dataframe per index

我有一个 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 个最低值?

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

import pandas as pd

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

你可以试试:

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)