Python实现每周CSV文件新增及状态变更条目检测
任务CSV数据对比与差异提取解决方案
实现步骤
假设:
- 历史数据DataFrame:
df_history(对应Weekly_Data_yyyy_mm_dd) - 新数据DataFrame:
df_new(对应New_Weekly_Data) - 任务唯一标识为DataFrame索引
- 状态列名为
is_closed(可替换为实际列名)
1. 提取状态从FALSE变为TRUE的任务
先对齐两个数据框的共同任务,再筛选状态变更的条目:
# 获取两个数据集中都存在的任务索引 common_tasks = df_history.index.intersection(df_new.index) # 筛选历史未关闭、新数据已关闭的任务 status_updates = df_new.loc[ common_tasks & (df_history['is_closed'] == False) & (df_new['is_closed'] == True) ]
注意:如果状态列是字符串类型(比如
"TRUE"/"FALSE"),把判断条件改为df_history['is_closed'] == "FALSE"即可。
2. 合并新增任务与状态变更任务
结合你已实现的新增任务提取逻辑,合并两类差异:
# 你已实现的新增任务提取 new_tasks = df_new[~df_new.index.isin(df_history.index)] # 合并所有差异条目(去重避免意外重复) all_differences = pd.concat([new_tasks, status_updates]).drop_duplicates()
3. 输出结果
可以保存为CSV或直接打印:
# 保存差异到CSV文件 all_differences.to_csv('Task_Differences.csv', index=True) # 或控制台打印分块结果 print("=== 新增任务 ===") print(new_tasks) print("\n=== 状态从未完成变为已完成的任务 ===") print(status_updates)
关键注意事项
- 确保任务唯一标识是DataFrame的索引,如果实际用的是某列(如
task_id),先设置索引:df_history = df_history.set_index('task_id') df_new = df_new.set_index('task_id') - 用
index.intersection对齐共同任务,从根源避免因数据框形状不一致导致的全量对比问题。
内容的提问来源于stack exchange,提问作者Hesitant_Skeleton
相关产品推荐
相关产品推荐

