我有一个包含公司软件详细信息以及安装日期的csv文件。我正在使用dataframe中的pandas读取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是否与变量中存储的ID匹配,然后比较日期并将最新的ID存储在变量中。当software_id与存储的软件id不匹配时,则意味着新的software_id块已启动。然后它将先前的值存储在数据框中,并开始执行下一个块,依此类推。
仅供参考-我是熊猫菜鸟。
感谢您的所有帮助。
首先,您需要将installed_date
列转换为datetime
:
df['installed_date'] = pd.to_datetime(df['installed_date'])
然后,您可以使用以下选项之一:
选项1:上 sort
的值,installed_date
然后drop_duplicates
仅保留per的最后一行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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句