Pandas 如何查询唯一ID最后出现的对应月度CSV文件名
解决步骤
首先修正你现有代码的一个潜在问题:你当前用files.sort()是按字符串字典序排序,你的文件同时包含2020年和2021年的记录,字典序会把01_2021.csv排在11_2020.csv前面,和实际时间顺序相反,会导致最终取到的lastSeen不是最晚出现的时间,建议先把排序逻辑修改为按文件对应的实际时间排序:
# 替换原有代码中的 files.sort() 部分 def get_file_time(file_path): # 从文件名提取年月转成数值用于排序,比如 11_2020.csv 转成 202011 file_name = os.path.split(file_path)[-1] ym_str = file_name.replace('.csv', '') month, year = ym_str.split('_') return int(year) * 100 + int(month) files.sort(key=get_file_time)
排序修正后你合并得到的df就是按时间从早到晚堆叠的,后续只需要做去重处理即可得到目标结果:
# 从fileName列提取年月作为lastSeen df['lastSeen'] = df['fileName'].str.replace('.csv', '', regex=False) # 按id去重,保留每个id最后一次出现的记录,仅保留需要的两列 result_df = df.drop_duplicates(subset='id', keep='last')[['id', 'lastSeen']] # 按id升序排序后导出结果 result_df.sort_values('id', ignore_index=True).to_csv('finalFile.csv', index=False)
如果你已经确认之前的排序逻辑符合时间从早到晚的要求,不需要修正排序,直接执行后面的处理代码即可。
内容的提问来源于stack exchange,提问作者Baobab1988
相关产品推荐
相关产品推荐

