为了账号安全,请及时绑定邮箱和手机立即绑定

如何获得两个条件语句以将信息拉到同一列?

如何获得两个条件语句以将信息拉到同一列?

www说 2023-05-16 14:23:42
我需要在两种情况下进行计算,但输出出现在同一列中Erisa (Local)。我需要检查列中是否有值ERISA Percentage,如果有,则将该值乘以另一列“净额(本地)”。如果该ERISA Percentage列没有值,我想检查该ERISA Status列中的特定单词Erisa。如果该行有那个词,那么我需要在 column 中提取值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)
查看完整描述

1 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

最佳做法是对性能进行矢量化计算。因此我用过np.where

  1. 反转你的逻辑,当百分比小于等于零且状态不是Erisa时默认为零

  2. 如果百分比 >零则标准计算

  3. 留下一个案例,它是Erisa并且百分比 <

  4. 为了更好地衡量,我添加了一个列检查以更好地测试逻辑是否按定义工作

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"), 0, 

                     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


查看完整回答
反对 回复 2023-05-16
  • 1 回答
  • 0 关注
  • 88 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信