从数据框中保留具有最新日期的数据

2024-04-19 21:57:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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

如何为一个软件代码选择行集,并删除除最新日期的行以外的所有行,然后移动到下一个软件代码,直到文件中每个软件代码只有一个条目。我无法硬编码要检查的软件id,因为有数千个

我的逻辑是在两个变量中读取并存储第一个软件id和安装日期,然后开始逐行读取文件。下一行将检查软件id是否与存储在变量中的id匹配,然后比较日期并将最新的id存储在变量中。 如果软件id与存储的软件id不匹配,则表示新的软件id块已启动。然后,它将以前的值存储在数据帧中,并开始执行下一个块,依此类推

仅供参考-我是一个熊猫noob

谢谢你的帮助


Tags: 文件csv数据代码id软件driversoftware
2条回答

您可以执行groupby,如下所示:

df.groupby("software_id", as_index=False)["software_name", "installed_date", "software_version"].max("installed_date")

它按software_id对行进行分组,保留所有需要的列,并为每个组保留具有最高installed_date的行

df是包含文件内容的数据帧

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

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

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

选项1:sortinstalled_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

相关问题 更多 >