我有一个 Dataframe 如下
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)按Name
分组
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
2条答案
按热度按时间omhiaaxx1#
将现有类别添加到列表,并使用“按
Name
列删除重复项”进行排序:如果可能,某些值不在类别列表中,也删除缺失值:
qgzx9mmu2#
您可以使用encode_categorical从pyjanitor抽象类别列的创建,并使用
drop_duplicates
或groupby
: