首页 > 解决方案 > 将数据保留为 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 块已启动。然后它将先前的值存储在数据帧中并开始执行下一个块,依此类推。

仅供参考 - 我是熊猫菜鸟。

感谢所有的帮助。

标签: pythonpandascsv

解决方案


首先,您需要将installed_date列转换为datetime

df['installed_date'] = pd.to_datetime(df['installed_date'])

然后,您可以使用以下选项之一:

选项 1: 然后仅保留最后一行sort的值。installed_datedrop_duplicatessoftware_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

推荐阅读