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
相关产品推荐
相关产品推荐

