python - 将数据保留为 pandas 数据框中的最新日期
问题描述
我有一个包含公司软件详细信息以及安装日期的 csv 文件。我正在使用数据框中的熊猫读取 csv 文件。以下是包含两个不同软件的示例数据:
software_id software_name installed_date software_version
8331 Intel(R) Graphics Media Accelerator Driver 2009-05-23 0:00 8.15.10.2008
8331 Intel(R) Graphics Media Accelerator Driver 2010-09-15 0:00 8.15.10.2008
8331 Intel(R) Graphics Media Accelerator Driver 2009-12-27 0:00 8.15.10.2008
8332 Wireless Switch Utility 2009-12-22 0:00 4.3.1400.0
8332 Wireless Switch Utility 2010-11-22 0:00 4.3.1400.0
8332 Wireless Switch Utility 2011-01-25 0:00 4.3.1400.0
因此,从上述数据中,我只需要保留一行,其中包含每个软件代码的最新日期。例如,上述文件的输出应该是:
software_id software_name installed_date software_version
8331 Intel(R) Graphics Media Accelerator Driver 2010-09-15 0:00 8.15.10.2008
8332 Wireless Switch Utility 2011-01-25 0:00 4.3.1400.0
如何为一个软件代码选择一组行并删除除具有最新日期的行之外的所有行,然后移至下一个软件代码,直到文件每个软件代码只有一个条目。我无法对 software_id 进行硬编码来检查,因为它们有数千个。
我的逻辑是读取第一个 software_id 和 installed_date 并将其存储在两个变量中,然后开始逐行读取文件。下一行将检查 software_id 是否与存储在变量中的匹配,然后比较日期并将最新的存储在变量中。当 software_id 与存储的软件 id 不匹配时,则意味着新的 software_id 块已启动。然后它将先前的值存储在数据帧中并开始执行下一个块,依此类推。
仅供参考 - 我是熊猫菜鸟。
感谢所有的帮助。
解决方案
首先,您需要将installed_date
列转换为datetime
:
df['installed_date'] = pd.to_datetime(df['installed_date'])
然后,您可以使用以下选项之一:
选项 1: 然后仅保留最后一行sort
的值。installed_date
drop_duplicates
software_id
df.sort_values('installed_date').drop_duplicates('software_id', keep='last')
选项 2: group
使用数据框softaware_id
和聚合idxmax
来获取每组最近日期的索引software_id
,然后loc
与此索引一起使用来过滤所需的行:
idx = df.groupby('software_id')['installed_date'].idxmax()
df.loc[idx]
结果:
software_id software_name installed_date software_version
1 8331 Intel(R) Graphics Media Accelerator Driver 2010-09-15 8.15.10.2008
5 8332 Wireless Switch Utility 2011-01-25 4.3.1400.0
推荐阅读
- python - Python遍历文件夹中的每个文件以剪切部分视频
- c++ - 我无法显示文件的第一行
- gcc - 这个编译器标志实现了什么?
- android - 参数 currentAccessToken 为空
- java - 默认构造函数未定义隐式超级构造函数 Object()。必须定义显式构造函数
- mocha.js - package.json 中的通配符故障
- javascript - 如何使用 getByTestId 选择元素,该元素也具有 react-testing-library 的特定值
- github - 来自集群节点的 ssh 触发所有远程主机的公钥错误(MWE for github)
- reactjs - React/NextJS 使用 UseEffect 错误:渲染的钩子比上一次渲染期间更多
- mysql - MYSQL查询以显示按内部连接列分组的列的最大值