首页 > 解决方案 > 使用条件语句 Python 映射和比较 2 列

问题描述

我正在寻找并使用条件语句从总价值中分离出应税价值。

如果Tax_no1 和 Tax_no2 列中的前 2 个字符不同,则我们必须从Amount 列计算 Tax百分比 18%并更新value3 列中的值

值 3 = 金额*18/100

如果Tax_no1 和 Tax_no2 列中的前 2 个字符相同,那么我们必须从Amount 列计算 18% 的税百分比, 将计算值除以 2 并更新value1 和 value2 列中的值

value1 = (金额 * 18/100)/2, value1 = (金额 * 18/100)/2

或者

value1 = 金额 * 9/100,value2 = 金额 * 9/100

输入数据 :

Tax_no1    Tax_No2     Amount      value1    value2    value3
AZ0001B    AZ0001B     35000
BZ0002A    CD0002A     12800.00
25CA895    25CA895     28967.90
NY78615    DY78615     367899.9
LO10985    LO10985     156789
01256NY    02256NY     2890657

预期产出值:

Tax_no1    Tax_No2     Amount      value1    value2    value3
AZ0001B    AZ0001B     35000        3150      3150      NaN
BZ0002A    CD0002A     12800.00     NaN       NaN       2304
25CA895    25CA895     28967.90     2607.11   2607.11   NaN
NY78615    DY78615     367899.9     NaN       NaN       66221.98
LO10985    LO10985     156789       14111.01  14111.01  NaN
01256NY    02256NY     2890657      NaN       NaN       520318.26

我尝试使用的脚本:

df['Tax1'] = df['Tax_no1'].str[:2]
df['Tax2'] = df['Tax_no2'].str[:2]

if df['Tax1'] != df['Tax2']:
   df['value3'] = Amount * 18/100
else:
   df['value1'] = Amount * 9/100
   df['value2'] = Amount * 9/100

标签: pythonpandas

解决方案


您可以使用布尔索引。首先创建一个比较前缀的掩码,然后您可以使用例如np.where

m = df["Tax_No1"].str[:2] == df["Tax_No2"].str[:2]

df["value1"] = np.where(m, df.Amount * 9 / 2 / 100, np.nan)
df["value2"] = np.where(m, df.Amount * 9 / 2 / 100, np.nan)
df["value3"] = np.where(~m, df.Amount * 18 / 100, np.nan)

print(df)

印刷:

   Tax_No1  Tax_No2     Amount     value1     value2      value3
0  AZ0001B  AZ0001B    35000.0  1575.0000  1575.0000         NaN
1  BZ0002A  CD0002A    12800.0        NaN        NaN    2304.000
2  25CA895  25CA895    28967.9  1303.5555  1303.5555         NaN
3  NY78615  DY78615   367899.9        NaN        NaN   66221.982
4  LO10985  LO10985   156789.0  7055.5050  7055.5050         NaN
5  01256NY  02256NY  2890657.0        NaN        NaN  520318.260

推荐阅读