gpt4 book ai didi

python - pandas groupby 并进行分类排序以删除重复项

转载 作者:行者123 更新时间:2023-12-02 17:58:38 26 4
gpt4 key购买 nike

我有一个如下所示的数据框

df = pd.DataFrame({
"Name": ["Tim", "Tim", "Tim", "Tim", "Tim",'Jack','Jack','Jack'],
"Status": ["A1", "E1", "B3", "D4", "C90","A1","C90","B3"]
})

我的状态变量的实际顺序是 B3 < A1 < D4 < C90 < E1。

所以最后一个值是 E1,第一个值是 B3。

我想做以下事情

a) groupby 名称

a) 根据上面显示的分类顺序对值进行排序

c) 仅保留最后一个值(根据 Name 列删除重复项后)

所以,我尝试了以下方法

df["Status"] = df["Status"].astype("category")
df["Status"] = df["Status"].cat.set_categories(["B3", "A1", "D4", "C90", "E90"], ordered=True)
df = df.sort_values(['Status'])
df_cleaned = df.drop_duplicates(['Status'],keep='last')

但这会导致输出不正确。

我希望我的输出如下所示(每个Name一行及其最新/最后一个Status值)

Name   Status
Tim E1
Jack C90

最佳答案

将现有类别添加到列表中并按 Name 列删除重复项进行排序:

df["Status"] = pd.Categorical(df["Status"], 
categories=["B3", "A1", "D4", "C90", "E90","E1"],
ordered=True)

df_cleaned = (df.sort_values(['Status'])
.drop_duplicates(['Name'],keep='last')

print (df_cleaned)
Name Status
6 Jack C90
1 Tim E1

如果可能,某些值不在类别列表中,也会删除缺失值:

df_cleaned = (df.dropna(subset=['Status'])
.sort_values(['Status'])
.drop_duplicates(['Name'],keep='last')

关于python - pandas groupby 并进行分类排序以删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74980748/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com