python - 使用条件语句 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
解决方案
您可以使用布尔索引。首先创建一个比较前缀的掩码,然后您可以使用例如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
推荐阅读
- php - Drupal 8 创建 XML 队列
- rust - rust 语言如何处理控制台输入?
- mixed-integer-programming - 使用 Time Windows 进行一维装箱
- node.js - 聚合在 mongo shell 中有效,但在节点中无效
- python - python函数比较dunders的使用
- json - 过滤数组代码不会呈现假定的过滤项Angular 9
- java - 用一千个“A”字符构建一个字符串
- entity-framework - EF中的跟踪行为范围
- ios - 当我无限滚动它们时,UICollectionViewCell 消失
- angular - 如何使用 AngularFireDatabase 和 Jasmine Spy/Mock 测试 Angular 服务