python - 排序/选择唯一和最新的数据
问题描述
我正在尝试从我的数据中获取最相关的价值。我想在 pandas 中使用 max 和 min 函数来获取最旧和最近的日期,但我找不到其他的修复方法。我正在尝试从我的数据集中获取一家独特的公司和产品,并根据这些点获取其余数据。如果有人能告诉我在 python 中用于解决此类问题的工具集将非常有用,或者关于如何在 python 中解决此类问题的指导,那将非常有帮助。
- 对于 security_level,superservere>severe > medium > material > minor
- 对于评级,如果我们看到同一家公司和产品既真实又不合格,则为真实
- 对于 rating_level,关键 > 高 > 中 > 低
- 对于 first_level,最早的日期和 last_release,最近的日期
- score,同一产品和公司中的最高分
公司 | 产品 | 安全级别 | 评分 | 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 |
解决方案
dtype
将offirst_release
和last_release
列更改为datetime
df['last_release'] = pd.to_datetime(df['last_release'])
df['first_release'] = pd.to_datetime(df['first_release'])
转换列security_level
并rating_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
列上的数据框company
和product
聚合剩余的列与指定的相应聚合函数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
推荐阅读
- c++ - std::unordered_map 的桶数意外增长
- javascript - 应用程序的 html 加载,但使用 angular 构建的 js 函数被无限期卡住加载
- wordpress - Wordpress:将触发“新页面”触发器之前的挂钩
- flutter - icon_fonts 在我的颤振应用程序中不起作用
- mariadb - 如何使用 SQL 和多重连接或合并它们
- python - 我需要比较两组并警告任何匹配的元素
- java - 如何将两个类 JPA 映射到按类型列区分的同一个表,并让它们具有一个集合,该集合是表的行
- java - Jackson 解析错误:异常 org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "Results"
- python - 模拟烧瓶单元测试的令牌 - firebase-admin-python SDK
- xcode - Xcode 错误:架构 arm64 的重复符号