如何按条件复制pandas DataFrame行、修改单列后追加回原表
这个需求完全可以实现,你可以通过遍历筛选列表批量处理后拼接数据来完成,具体实现如下:
实现思路
- 先把所有筛选列表和对应的目标ID值整理为映射字典,避免重复编写相同逻辑
- 遍历映射字典,每次筛选出符合id1条件的行,修改ID列值后暂存
- 把所有处理好的行统一追加到原DataFrame末尾即可
完整可运行代码
import pandas as pd import numpy as np # 定义原始DataFrame d = {'id1': ['85643', '85644','8564312','8564314','85645','8564316','85646','8564318','85647','85648','85649','85655'], 'ID': ['G-00001', 'G-00001','G-00002','G-00002','G-00001','G-00002','G-00001','G-00002','G-00001','G-00001','G-00001','G-00001'], 'col1': [1, 2,3,4,5,60,0,0,6,3,2,4], 'Goal': [np.nan, 56,np.nan,89,73,np.nan ,np.nan ,np.nan, np.nan, np.nan, 34,np.nan ], 'col2': [3, 4,32,43,55,610,0,0,16,23,72,48], 'col3': [1, 22,33,44,55,60,1,5,6,3,2,4], 'Name': ['a1asd', 'a2asd','aabsd','aabsd','a3asd','aabsd','aasd','aabsd','aasd','aasd','aasd','aasd'], 'Date': ['2021-06-13', '2021-06-13','2021-06-13','2021-06-14','2021-06-15','2021-06-15','2021-06-13','2021-06-16','2021-06-13','2021-06-13','2021-06-13','2021-06-16']} dff = pd.DataFrame(data=d) # 整理筛选列表和对应ID的映射字典 id_mapping = { 'b-65': ['85643','85645', '85655','85646'], 'b-66': ['85643','85645','85647','85648','85649','85644'], 'b-67': ['8564312','8564314','8564316','8564318'] } # 初始化结果为原数据的拷贝,避免修改原始数据 result_df = dff.copy() for new_id, id_list in id_mapping.items(): # 筛选符合id1条件的行 filtered_rows = dff[dff['id1'].isin(id_list)].copy() # 修改ID列值 filtered_rows['ID'] = new_id # 追加到结果中,重置索引避免重复 result_df = pd.concat([result_df, filtered_rows], ignore_index=True) # 输出最终结果 print(result_df)
结果验证
运行代码后最终的DataFrame会保留原12行数据,再追加b65对应的4行、b66对应的6行、b67对应的4行,总共有22行,完全符合你给出的示例效果。
内容的提问来源于stack exchange,提问作者rra
相关产品推荐
相关产品推荐

