pandas select 行条件优先顺序

pandas select rows with condition in priority order

我是 pandas 的新手。所以我的数据框看起来像这样:

    id  car date    color
1   2   bmw 2021-05-21  black
2   3   bmw 2021-05-21  yellow
3   4   mercedes    2021-06-21  red
4   5   toyota  2021-11-01  pink
5   6   toyota  2021-09-06  black
6   7   mercedes    2021-07-07  white

我需要优先选择具有最新日期和颜色的唯一“汽车”的行(红色、粉色、黑色、白色、黄色) ,我的意思是,如果按日期排序的数据框中的汽车颜色为红色,则我保存该行,如果汽车没有红色,则我搜索粉红色等。

所以首先 - 按日期排序 其次 - 如果日期重复,我按需要的颜色排序

我按日期排序: df.sort_values(by="date").drop_duplicates(subset=["car", "color"], keep="last")

看起来像 rn:

    id  car date    color
1   2   bmw 2021-05-21  black
2   3   bmw 2021-05-21  yellow
3   4   mercedes    2021-06-21  red
6   7   mercedes    2021-07-07  white
5   6   toyota  2021-09-06  black
4   5   toyota  2021-11-01  pink

我真正想看到的:

id  car date    color
2   bmw 2021-05-21  black
5   toyota  2021-11-01  pink
7   mercedes    2021-07-07  white

IIUC,使用pd.Categorical来定义你的订单,然后sort_values + groupby.

df["color"] = pd.Categorical(
    df["color"], categories=["red", "pink", "black", "white", "yellow"], ordered=True
)

df.sort_values(by=["date", "color"], ascending=[0, 1]).groupby(
    "car", as_index=0
).first()

        car  id       date  color
0       bmw   2 2021-05-21  black
1  mercedes   7 2021-07-07  white
2    toyota   5 2021-11-01   pink