每个索引删除 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)
我有一个 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)