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

Python Pandas 基于hesapKodu1列条件计算两列差值并汇总的问题

实现方案

你可以用numpy.where做条件判断,按规则计算每行差值后再汇总,代码逻辑清晰易维护:
首先导入依赖(如果尚未导入numpy):

import numpy as np

完整实现代码:

# 保留你原有拆分列的逻辑
source_df['hesapKodu1_1']=source_df['hesapKodu1'].str[:1]
source_df['hesapKodu1_2']=source_df['hesapKodu1'].str[:2]
source_df['hesapKodu1_3']=source_df['hesapKodu1'].str[:3]

# 定义特殊编码集合
special_code_list = ['123', '125', '130']

# 按规则计算每行差值:特殊编码用BORC-ALACAK,其余用ALACAK-BORC
source_df['diff_val'] = np.where(
    source_df['hesapKodu1_3'].isin(special_code_list),
    source_df['BORÇ'] - source_df['ALACAK'],
    source_df['ALACAK'] - source_df['BORÇ']
)

# 汇总所有差值并保留两位小数
total_result = round(source_df['diff_val'].sum(), 2)
简化优化

如果你的hesapKodu1列本身就是3位长度的字符串,不需要拆分列也可以直接判断原列,修改条件部分即可:

source_df['diff_val'] = np.where(
    source_df['hesapKodu1'].isin(special_code_list),
    source_df['BORÇ'] - source_df['ALACAK'],
    source_df['ALACAK'] - source_df['BORÇ']
)
无新列实现方案

如果不想新增临时列存储每行差值,可以分开计算两部分求和再合并:

special_code_list = ['123', '125', '130']
# 计算特殊编码的差值总和
special_sum = (source_df.loc[source_df['hesapKodu1_3'].isin(special_code_list), 'BORÇ'].sum() 
               - source_df.loc[source_df['hesapKodu1_3'].isin(special_code_list), 'ALACAK'].sum())
# 计算其余编码的差值总和
normal_sum = (source_df.loc[~source_df['hesapKodu1_3'].isin(special_code_list), 'ALACAK'].sum() 
              - source_df.loc[~source_df['hesapKodu1_3'].isin(special_code_list), 'BORÇ'].sum())
# 汇总结果
total_result = round(special_sum + normal_sum, 2)

内容的提问来源于stack exchange,提问作者Ali İlhami ÖZTAN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 05:06:03