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

Python中基于STAGE匹配实现两表指定列相乘的for循环问题

问题:基于STAGE匹配两张表并计算衍生列

数据表

Table A

NAMESTAGEQuanProductsAB
XYD1234PROD4643A, C, T, Y10
FGY4567TEST4739A, U, p, Y01
YUD4568QUE45632I, Y, O, P01
OKE4556STACK97474A, C, P, Y10

Table B

STAGEAB
PROD105
TEST2010
QUE3015
STACK4925

需求

当Table A每行的STAGE与Table B的STAGE匹配时,将Table A的A列与Table B对应STAGE的A列相乘得到A_STAGE,同理Table A的B列与Table B对应STAGE的B列相乘得到B_STAGE,最终输出如下表格:

目标输出

NAMESTAGEQuanProductsABA_STAGEB_STAGE
XYD1234PROD4643A, C, T, Y10100
FGY4567TEST4739A, U, p, Y01010
YUD4568QUE45632I, Y, O, P01015
OKE4556STACK97474A, C, P, Y10490

现有代码问题排查

你写的for循环代码存在以下问题:

  • A.loc['Stage'] == B['Stage']:索引错误(应该按行索引i定位),且仅做了比较未使用结果,无法实现STAGE匹配逻辑
  • A['A_Stage'] = A['A'] * B['A']:直接按行位置相乘,未基于STAGE匹配,计算逻辑完全错误
  • 循环整体逻辑混乱,没有针对每行找到Table B中对应STAGE的取值

解决方案

推荐方案:使用pandas向量化操作(高效简洁)

不需要循环,直接用merge匹配两张表后计算衍生列:

import pandas as pd

# 假设A、B是已加载的DataFrame
merged_df = pd.merge(A, B, on='STAGE', suffixes=('', '_b'))

# 计算衍生列
merged_df['A_STAGE'] = merged_df['A'] * merged_df['A_b']
merged_df['B_STAGE'] = merged_df['B'] * merged_df['B_b']

# 保留目标输出列
result = merged_df[['NAME', 'STAGE', 'Quan', 'Products', 'A', 'B', 'A_STAGE', 'B_STAGE']]

print(result)

备选方案:修改循环实现(不推荐,效率低)

如果一定要用循环,可通过字典快速匹配STAGE取值:

# 将Table B转为字典,便于快速查找
stage_map = B.set_index('STAGE').to_dict('index')

# 初始化衍生列
A['A_STAGE'] = 0
A['B_STAGE'] = 0

for i in range(len(A)):
    current_stage = A.loc[i, 'STAGE']
    # 获取当前STAGE对应的Table B取值
    b_data = stage_map.get(current_stage, {})
    # 计算并赋值
    A.loc[i, 'A_STAGE'] = A.loc[i, 'A'] * b_data.get('A', 0)
    A.loc[i, 'B_STAGE'] = A.loc[i, 'B'] * b_data.get('B', 0)

print(A)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:45:34