You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按条件复制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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 21:06:03