如何用Pandas为文件添加最新版本标记及关联DataDate标记?
实现两个标记字段的方法
先构造示例数据方便测试(和你的DataFrame结构对齐):
import pandas as pd data = { 'FileName': ['report.pdf', 'report.pdf', 'data.csv', 'data.csv', 'data.csv'], 'FileModDate': ['2024-01-01', '2024-02-15', '2024-03-01', '2024-04-20', '2024-03-10'], 'DataDate': ['2024-01-01', '2024-02-15', '2024-03-01', '2024-04-20', '2024-03-10'] } df = pd.DataFrame(data) # 关键步骤:把FileModDate转成datetime类型(如果你的原始数据是字符串格式,必须做这一步) df['FileModDate'] = pd.to_datetime(df['FileModDate'])
1. 生成LatestFile标记
按FileName分组,将每组内FileModDate最新的行标记为1,其余为0:
# 用transform获取每个分组的最新修改时间,和当前行时间比较后转成整数标记 df['LatestFile'] = (df['FileModDate'] == df.groupby('FileName')['FileModDate'].transform('max')).astype(int)
原理:transform('max')会给每一行返回其所在文件分组的最新修改时间,和原列对比得到布尔值,转成int后True变1,False变0。
2. 生成DataDateFlag标记
要求仅当LatestFile为1时标记为1,否则为0,直接基于已生成的LatestFile列处理即可:
# 方法一:直接复制(逻辑完全匹配,最简洁) df['DataDateFlag'] = df['LatestFile'] # 方法二:显式条件控制(适合后续可能扩展规则的场景) df['DataDateFlag'] = df['LatestFile'].where(df['LatestFile'] == 1, 0)
最终效果示例:
| FileName | FileModDate | DataDate | LatestFile | DataDateFlag |
|---|---|---|---|---|
| report.pdf | 2024-01-01 | 2024-01-01 | 0 | 0 |
| report.pdf | 2024-02-15 | 2024-02-15 | 1 | 1 |
| data.csv | 2024-03-01 | 2024-03-01 | 0 | 0 |
| data.csv | 2024-04-20 | 2024-04-20 | 1 | 1 |
| data.csv | 2024-03-10 | 2024-03-10 | 0 | 0 |
注意:如果你的FileModDate是字符串格式,必须先转成datetime类型,否则字符串排序会导致最大值判断错误。
内容的提问来源于stack exchange,提问作者Zio
相关产品推荐
相关产品推荐

