如何基于列值生成新DataFrame,移除原表已用行并分别导出CSV?
按Product_id拆分DataFrame并保存的最优实现方法
需求说明
现有包含Product_id列的DataFrame(Df_original),需要完成以下操作:
- 按指定的
Product_id值拆分出多个子DataFrame,分别保存为独立CSV文件 - 将原DataFrame中未被拆分的剩余行,单独保存为另一个CSV文件
原DataFrame数据:
Id value Product_id 0 1 123 7 1 2 514 9 2 3 234 1 3 4 912 9 4 5 325 1 5 6 301 7 6 7 325 1 7 8 301 9
最优实现代码
import pandas as pd # 加载原DataFrame(替换为你的实际数据加载逻辑) # Df_original = pd.read_csv("your_source_file.csv") # 定义需要拆分的目标Product_id列表 target_product_ids = [7, 9] # 初始化布尔掩码,标记需保留的行(初始全为True) remaining_rows_mask = pd.Series([True] * len(Df_original), index=Df_original.index) # 遍历目标ID,拆分并保存子DataFrame for pid in target_product_ids: # 筛选对应Product_id的行 subset_df = Df_original[Df_original['Product_id'] == pid] # 保存为CSV文件,文件名按Product_id命名 subset_df.to_csv(f"Df_new_pd_{pid}.csv", index=False) # 更新掩码:将已拆分的行标记为不保留 remaining_rows_mask &= (Df_original['Product_id'] != pid) # 筛选剩余行并保存 remaining_df = Df_original[remaining_rows_mask] remaining_df.to_csv("Df_remaining.csv", index=False)
代码优势
- 高效低耗:仅对原DataFrame进行两次全量扫描(拆分目标ID+筛选剩余行),避免重复遍历带来的性能损耗
- 灵活扩展:只需修改
target_product_ids列表,即可支持任意数量的Product_id拆分需求 - 结果精准:通过布尔掩码精准跟踪未拆分行,确保剩余数据无遗漏、无重复
执行后生成的文件内容
Df_new_pd_7.csv:
Id,value,Product_id 1,123,7 6,301,7
Df_new_pd_9.csv:
Id,value,Product_id 2,514,9 4,912,9 8,301,9
Df_remaining.csv:
Id,value,Product_id 3,234,1 5,325,1 7,325,1
内容的提问来源于stack exchange,提问作者Otávio Augusto
相关产品推荐
相关产品推荐

