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

使用Python查找增值税账户中已知结果Z的构成运算及对应数值

增值税账户数值匹配运算的Python实现

前置准备

  • 安装依赖库:pip install pandas openpyxl(读取.xlsx文件需用到)
  • 确认Excel文件中包含待分析的数值列(示例中列名为金额,可根据实际修改)

完整代码

import pandas as pd
import numpy as np

# ---------------------- 配置参数 ----------------------
EXCEL_PATH = "你的增值税账户数据.xlsx"  # 替换为你的文件实际路径
VALUE_COLUMN = "金额"  # 替换为Excel中数值列的真实列名
TARGET_Z = 31004  # 目标结果值
ERROR_TOLERANCE = 0.01  # 浮点误差容忍度,适配货币计算的分位误差
COMMON_TAX_RATES = [0.03, 0.06, 0.09, 0.13, 0.15, 0.2]  # 常见税率(小数形式,可按需添加)
# ------------------------------------------------------

# 读取Excel数据并提取数值列
df = pd.read_excel(EXCEL_PATH)
values = df[VALUE_COLUMN].dropna().tolist()  # 过滤空值,转为列表
value_indices = df[VALUE_COLUMN].dropna().index.tolist()  # 保留原始行索引,方便回溯原数据

# 存储匹配到的运算组合
matches = []

# 1. 单值运算匹配
for idx, num in zip(value_indices, values):
    # 情况1:数值直接等于Z
    if np.isclose(num, TARGET_Z, atol=ERROR_TOLERANCE):
        matches.append(f"行索引{idx}:{num} = {TARGET_Z}(直接匹配)")
    # 情况2:数值的某一百分比等于Z(反推税率)
    if num != 0:
        calc_rate = TARGET_Z / num
        if any(np.isclose(calc_rate, rate, atol=0.001) for rate in COMMON_TAX_RATES):
            matched_rate = next(r for r in COMMON_TAX_RATES if np.isclose(calc_rate, r, atol=0.001))
            matches.append(f"行索引{idx}:{num} × {matched_rate*100}% = {TARGET_Z}")

# 2. 双值组合运算匹配
for i in range(len(values)):
    a = values[i]
    a_idx = value_indices[i]
    for j in range(i+1, len(values)):  # 避免重复计算同一组数值(如a+b和b+a只算一次加法)
        b = values[j]
        b_idx = value_indices[j]
        
        # 加法
        if np.isclose(a + b, TARGET_Z, atol=ERROR_TOLERANCE):
            matches.append(f"行索引{a_idx}({a}) + 行索引{b_idx}({b}) = {TARGET_Z}")
        # 减法(两种顺序)
        if np.isclose(a - b, TARGET_Z, atol=ERROR_TOLERANCE):
            matches.append(f"行索引{a_idx}({a}) - 行索引{b_idx}({b}) = {TARGET_Z}")
        if np.isclose(b - a, TARGET_Z, atol=ERROR_TOLERANCE):
            matches.append(f"行索引{b_idx}({b}) - 行索引{a_idx}({a}) = {TARGET_Z}")
        # 乘法
        if np.isclose(a * b, TARGET_Z, atol=ERROR_TOLERANCE):
            matches.append(f"行索引{a_idx}({a}) × 行索引{b_idx}({b}) = {TARGET_Z}")
        
        # 税务常见的百分比组合运算
        # 情况1:两数之和的某一百分比等于Z
        sum_ab = a + b
        if sum_ab != 0:
            calc_rate = TARGET_Z / sum_ab
            if any(np.isclose(calc_rate, rate, atol=0.001) for rate in COMMON_TAX_RATES):
                matched_rate = next(r for r in COMMON_TAX_RATES if np.isclose(calc_rate, r, atol=0.001))
                matches.append(f"(行索引{a_idx}({a}) + 行索引{b_idx}({b})) × {matched_rate*100}% = {TARGET_Z}")
        # 情况2:两数之差的某一百分比等于Z(两种顺序)
        diff_ab = a - b
        if diff_ab != 0:
            calc_rate = TARGET_Z / diff_ab
            if any(np.isclose(calc_rate, rate, atol=0.001) for rate in COMMON_TAX_RATES):
                matched_rate = next(r for r in COMMON_TAX_RATES if np.isclose(calc_rate, r, atol=0.001))
                matches.append(f"(行索引{a_idx}({a}) - 行索引{b_idx}({b})) × {matched_rate*100}% = {TARGET_Z}")
        diff_ba = b - a
        if diff_ba != 0:
            calc_rate = TARGET_Z / diff_ba
            if any(np.isclose(calc_rate, rate, atol=0.001) for rate in COMMON_TAX_RATES):
                matched_rate = next(r for r in COMMON_TAX_RATES if np.isclose(calc_rate, r, atol=0.001))
                matches.append(f"(行索引{b_idx}({b}) - 行索引{a_idx}({a})) × {matched_rate*100}% = {TARGET_Z}")

# 输出匹配结果
if matches:
    print("找到以下匹配的运算组合:")
    for match in matches:
        print("-", match)
else:
    print("未找到匹配的运算组合,可尝试扩展税率范围或检查参数配置。")

关键说明

  • 误差处理:用np.isclose替代直接相等判断,避免浮点计算的精度误差(比如货币分位的微小差异)
  • 税率扩展:COMMON_TAX_RATES可根据业务场景添加更多税率,比如0.05(5%)、0.25(25%)等
  • 溯源便捷:输出结果包含Excel原始行索引,可直接对应回原数据定位数值
  • 性能优化:双值循环使用i+1避免重复计算同一组数值,减少冗余运算

注意事项

  1. 若Excel文件与代码在同一目录,可直接填写文件名;否则需填写完整路径
  2. 若数值列存在非数值数据,可添加pd.to_numeric(df[VALUE_COLUMN], errors='coerce')强制转换为数值型
  3. 若数据量极大,可提前筛选出接近TARGET_Z范围的数值,减少循环计算量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 04:55:17