【问题标题】:pandas select rows with condition in priority order熊猫按优先顺序选择有条件的行
【发布时间】:2021-10-08 02:50:14
【问题描述】:

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

    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

【问题讨论】:

  • @user3483203 好吧,我明白了,我将其更改为 car + color,因为我需要在下一步中保存颜色,按优先级颜色对其进行排序,也许逻辑不正确,但我需要删除日期不是最新的行

标签: python pandas dataframe sorting drop-duplicates


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-16
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 2020-12-28
    • 2019-01-27
    • 1970-01-01
    相关资源
    最近更新 更多