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

遍历Pandas DataFrame行关联其他DataFrame取值的问题排查

问题解决:Pandas循环append后列值被覆盖的问题

问题原因

你当前代码的核心问题是:每次执行df_final['seq'] = df.loc[i, "seq"]时,会给整个df_final的seq列赋值,而非仅针对刚append的那部分行。最后一次循环处理的是seq='z',因此所有行的seq都被覆盖成了z。

修复方案一:修改循环逻辑,先给临时数据加seq再append

在append到df_final之前,先给当前要添加的子DataFrame加上对应的seq列,避免覆盖历史数据:

import pandas as pd

df = pd.DataFrame(data={'table': ["a", "a", "b"], 'seq': ["xx", "xy", "z"]})
df_a = pd.DataFrame(data={'a_id': [1, 2, 3], 'col1': ["fg", "rt", "zh"]})
df_b = pd.DataFrame(data={'b_id': [4, 5, 6], 'col1': ["", "gh", "k"]})

df_final = pd.DataFrame()
for i in range(len(df)):
    current_seq = df.loc[i, "seq"]
    if current_seq in ['xx', 'xy']:
        # 复制df_a的a_id列,添加当前seq后再合并
        temp_df = df_a[['a_id']].copy()
        temp_df['seq'] = current_seq
        df_final = df_final.append(temp_df)
    elif current_seq == 'z':
        # 复制df_b的b_id列,添加当前seq后再合并
        temp_df = df_b[['b_id']].copy()
        temp_df['seq'] = current_seq
        df_final = df_final.append(temp_df)

# 可选:重置索引让序号连续
df_final = df_final.reset_index(drop=True)
print(df_final)

执行后输出:

a_id seq  b_id
0   1.0  xx   NaN
1   2.0  xx   NaN
2   3.0  xx   NaN
3   1.0  xy   NaN
4   2.0  xy   NaN
5   3.0  xy   NaN
6   NaN   z   4.0
7   NaN   z   5.0
8   NaN   z   6.0

修复方案二:用Pandas向量化操作(更高效)

避免循环,利用concat和assign实现向量化处理,性能更优,尤其适合大数据集:

import pandas as pd

df = pd.DataFrame(data={'table': ["a", "a", "b"], 'seq': ["xx", "xy", "z"]})
df_a = pd.DataFrame(data={'a_id': [1, 2, 3], 'col1': ["fg", "rt", "zh"]})
df_b = pd.DataFrame(data={'b_id': [4, 5, 6], 'col1': ["", "gh", "k"]})

# 处理xx、xy场景:重复df_a并绑定对应seq
xx_xy_rows = pd.concat([df_a[['a_id']].assign(seq=val) for val in ['xx', 'xy']], ignore_index=True)
# 处理z场景:绑定seq到df_b的b_id列
z_rows = df_b[['b_id']].assign(seq='z')
# 合并所有结果
df_final = pd.concat([xx_xy_rows, z_rows], ignore_index=True)
print(df_final)

输出与方案一完全一致,且更符合Pandas的最佳实践。

关键注意事项

  • 不要直接对整个DataFrame的列赋值来修改新增行,应先给子数据集添加列再合并。
  • 优先使用向量化操作替代循环逐行处理,提升代码效率和可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 14:26:59