首页 > 解决方案 > 排序/选择唯一和最新的数据

问题描述

我正在尝试从我的数据中获取最相关的价值。我想在 pandas 中使用 max 和 min 函数来获取最旧和最近的日期,但我找不到其他的修复方法。我正在尝试从我的数据集中获取一家独特的公司和产品,并根据这些点获取其余数据。如果有人能告诉我在 python 中用于解决此类问题的工具集将非常有用,或者关于如何在 python 中解决此类问题的指导,那将非常有帮助。

公司 产品 安全级别 评分 rating_level first_release 最后发布 分数
谷歌 移动的 次要的 真的 批判的 2020 年 4 月 11 日 2020 年 3 月 17 日 0.5
谷歌 操作系统 缓和 错误的 中等的 2019 年 9 月 5 日 2021 年 3 月 20 日 0.009
谷歌 操作系统 次要的 错误的 低的 2019 年 9 月 4 日 2020 年 5 月 11 日 19
谷歌 电视 严重的 真的 高的 2020 年 8 月 11 日 2021 年 3 月 4 日
谷歌 移动的 超严重 错误的 中等的 2015 年 4 月 6 日 2020 年 8 月 19 日 2.4
谷歌 移动的 次要的 错误的 高的 2019 年 8 月 8 日 2020 年 8 月 19 日 1.3
苹果 苹果手机 次要的 真的 低的 2020 年 2 月 3 日 2020 年 10 月 13 日 3
苹果 苹果手机 材料 真的 中等的 2018 年 1 月 21 日 2021 年 3 月 4 日 6
苹果 我看 材料 错误的 低的 2015 年 4 月 11 日 2020 年 8 月 13 日 8
苹果 苹果手机 材料 真的 中等的 2020 年 10 月 20 日 2021 年 3 月 19 日 5
戴尔 笔记本电脑 次要的 错误的 低的 2021 年 1 月 5 日 2021 年 3 月 20 日 1

输出:

公司 产品 安全级别 评分 rating_level first_release 最后发布 分数
谷歌 移动的 超严重 真的 批判的 2015 年 4 月 6 日 2020 年 8 月 19 日 2.4
谷歌 操作系统 缓和 错误的 中等的 2019 年 9 月 4 日 2021 年 3 月 20 日 19
谷歌 电视 严重的 真的 高的 2020 年 8 月 11 日 2021 年 3 月 4 日
苹果 苹果手机 材料 真的 中等的 2018 年 1 月 21 日 2021 年 3 月 19 日 6
苹果 我看 材料 错误的 低的 2015 年 4 月 11 日 2020 年 8 月 13 日 8
戴尔 笔记本电脑 次要的 错误的 低的 2021 年 1 月 5 日 2021 年 3 月 20 日 1

标签: pythonpython-3.xpandas

解决方案


dtype将offirst_releaselast_release列更改为datetime

df['last_release']  = pd.to_datetime(df['last_release'])
df['first_release'] = pd.to_datetime(df['first_release'])

转换列security_levelrating_level输入ordered categorical

df['rating_level'] = pd.Categorical(df['rating_level'], ['low', 'medium', 'high', 'critical'], ordered=True)
df['security_level'] = pd.Categorical(df['security_level'], ['minor', 'material', 'moderate', 'severe', 'supersevere'], ordered=True)

Group列上的数据框companyproduct聚合剩余的列与指定的相应聚合函数agg_dict

agg_dict = {'security_level': 'max', 'rating': 'max', 'rating_level': 'max',
            'first_release': 'min', 'last_release': 'max', 'score': 'max'}
            
out = df.groupby(['company', 'product'], as_index=False, sort=False).agg(agg_dict)

结果

>>> out

  company product security_level  rating rating_level first_release last_release  score
0  google  mobile    supersevere    True     critical    2015-04-06   2020-08-19    2.4
1  google      os       moderate   False       medium    2019-09-04   2021-03-20   19.0
2  google      tv         severe    True         high    2020-08-11   2021-03-04    NaN
3   apple  iphone       material    True       medium    2018-01-21   2021-03-19    6.0
4   apple  iwatch       material   False          low    2015-04-11   2020-08-13    8.0
5    dell  laptop          minor   False          low    2021-01-05   2021-03-20    1.0

推荐阅读