如何解决如何获得两个条件语句以将信息提取到同一列?
我需要在两个条件下进行计算,但输出必须出现在同一列Erisa (Local)
中。
我需要检查列ERISA Percentage
中是否有一个值,如果是,则将该值乘以另一列“净额(本地)”。
如果ERISA Percentage
列没有值,我想检查ERISA Status
列中是否有特定单词Erisa
。如果该行包含该单词,那么我需要提取Net Amount Local
列中的值。
我尝试了一个elif
语句和一个or语句,但是遇到了无效的语法错误。有人知道我应该对下面的代码进行什么修改吗?
ecdi['Erisa (Local)'] = ecdi.apply(lambda x: x['Net Amount (Local)'] * x['ERISA Percentage']/100 if x['ERISA Percentage']>0 and x['ERISA Status'] == "Erisa"
elif ecdi['Erisa (Local)'] = ecdi.apply(lambda x: x['Net Amount (Local)'] if x['ERISA Percentage'] == 0 and x['ERISA Status'] == "Erisa"
else 0,axis=1)
解决方法
最佳实践是作为性能的矢量化计算。因此,我使用了np.where
- 颠倒了您的逻辑,当 percentage 小于等于零且 status 不是 Erisa 时,默认为零 em> 如果百分比> 零 ,则为
- 标准计算
- 只剩下一种情况,即 Erisa 和百分比零
- 为了很好地衡量,我添加了 check 列,以更好地测试逻辑是否按定义工作了
r = 10
df = pd.DataFrame({"ERISA Percentage":[random.randint(-25,100) for i in range(r)],"Net Amount (Local)":[random.randint(50,125) for i in range(r)],"ERISA Status":[["Erisa","a","b"][random.randint(0,2)] for i in range(r)]
})
df = df.assign(**{"Erisa (Local)":lambda dfa:
np.where((dfa["ERISA Percentage"]<=0) & (dfa["ERISA Status"]!="Erisa"),np.where(dfa["ERISA Percentage"]>0,dfa["ERISA Percentage"]/100*dfa["Net Amount (Local)"],dfa["Net Amount (Local)"])),"check":lambda dfa: dfa["Erisa (Local)"]==dfa["Net Amount (Local)"]
})
print(df.to_string(index=False))
输出
ERISA Percentage Net Amount (Local) ERISA Status Erisa (Local) check
79 56 Erisa 44.24 False
68 124 b 84.32 False
33 124 Erisa 40.92 False
-21 100 b 0.00 False
42 124 b 52.08 False
-5 76 b 0.00 False
38 95 Erisa 36.10 False
20 109 b 21.80 False
55 63 a 34.65 False
-13 106 Erisa 106.00 True
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。