You need to enable JavaScript to run this app. Pandas DataFrame中按逐行条件判断插入新行的实现方案
优惠活动
大模型
产品
解决方案
定价
更多

Pandas DataFrame中按逐行条件判断插入新行的实现方案

Pandas 条件匹配后行插入的可落地方案

核心实现逻辑:避免直接迭代修改原DataFrame(易出现索引错位、迭代异常问题),改为逐行遍历原表时,按顺序收集「原行+符合条件的新行」到列表中,最后统一合并为新DataFrame。

第一步:修正现有辅助函数

当前编写的create_new_row存在两个问题:

  • 不满足判定条件时result变量未定义,会抛出异常
  • 仅返回计算后的列B值,没有生成完整的新行结构

修正后的函数逻辑:

import pandas as pd
def create_new_row(row):
    # 满足判定条件时生成完整新行
    if row['A'] == "Both" and row['B'] < 1000:
        # 替换为实际的自定义计算逻辑,示例为原B值加100
        new_b = row['B'] + 100 
        # 新行的A、C列与原行完全一致,沿用原行列结构
        return pd.Series([row['A'], new_b, row['C']], index=row.index)
    # 不满足条件返回空值,方便后续过滤
    return None

第二步:逐行收集并生成新DataFrame

按顺序遍历原表,先存入当前原行,再判断是否需要插入新行:

# 替换为实际使用的原DataFrame
df = pd.DataFrame({
    'A': ['Both', 'London', 'Manchester', 'Both'],
    'B': [999, 1002, 1005, 1001],
    'C': ['LP', 'KI', 'BV', 'IG']
})
# 初始化行存储列表
rows_container = []
# 逐行遍历原表,不做任何修改
for _, original_row in df.iterrows():
    # 先将当前原行加入列表
    rows_container.append(original_row)
    # 调用辅助函数生成符合条件的新行
    target_new_row = create_new_row(original_row)
    # 有有效新行则追加到列表
    if target_new_row is not None:
        rows_container.append(target_new_row)
# 合并所有行,重置索引避免重复
final_df = pd.DataFrame(rows_container).reset_index(drop=True)

结果验证

运行上述代码后,得到的final_df完全符合预期:

A     B    C
0        Both   999   LP
1        Both  1099   LP
2      London  1002   KI
3  Manchester  1005   BV
4        Both  1001   IG

注意事项

  • 只需要把create_new_row里的new_b赋值逻辑替换为对应自定义计算函数的调用即可,其余逻辑无需调整
  • 该方案不会打乱原有行的相对顺序,相比按索引位置插入的方法稳定性更高,适配大规模DataFrame场景

内容的提问来源于stack exchange,提问作者Alessandrini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 03:06:03