簡體   English   中英

為新變量推導值的條件語句

[英]Conditional statement to derive value for new variable

我有一個看起來像這樣的數據框

在此處輸入圖像描述

# sample data
df = pd.DataFrame({'id':[1,2,3,4,5],
                   'cfs':['REFER', 'DECLINE','PASS','REFER','REFER'],
                   'ofs':['DECLINE','DECLINE', 'PASS','REFER','PASS'],
                   'ffs':['PASS','DECLINE','PASS','REFER','PASS']})

我正在嘗試創建將創建此 output 的條件語句

在此處輸入圖像描述

這是我正在進行的工作,不用說還有許多其他嘗試。

# If else condition approach
if all df['cfs'] == 'DECLINE' | df['ofs'] == 'DECLINE' | df['ffs'] == 'DECLINE':
       df['md'] =='DECLINE'
else:
    if df['cfs'] == 'PASS' & df['ofs'] == 'PASS' & df['ffs'] == 'PASS':
           df['md'] =='PASS'
else:
    if any df['cfs'] == 'REFER'
        if df['ofs'] == 'REFER'
            if df['ffs'] == 'REFER':
                df['md'] =='REFER'
                
else: df['md'] =='REFER'

此解決方案導致語法錯誤:無效語法

在 3 個變量中需要考慮 4 個條件:

  1. 如果 cfs、ofs 或 ffs = 下降,md = 下降
  2. 如果 cfs、ofs 和 ffs = 通過,md = 通過
  3. 如果 cfs、ofs 和 ffs = 參考,md = 參考
  4. 如果 cfs、ofs 和 ffs 有 pass 和 refer 的組合,md = refer

你寫了

    if any df['cfs'] == 'REFER'

缺少一些( )括號和一個:冒號:

    if any(df['cfs'] == 'REFER'):

你可能會發現在 REPL 中使用這些函數很有啟發性:

$ python
Python 3.10.6 | packaged by conda-forge ...
>>>
>>> any([1, 1, 0])
True
>>> 
>>> all([1, 1, 0])
False

發布解決方案以防它可能對其他人有所幫助,最嚴格的最后一組邏輯

df.loc[(df['cfs'] == 'REFER') | (df['ofs'] == 'REFER') | (df['ffs'] == 'REFER'), 'md'] = 'REFER'
df.loc[(df['cfs'] == 'PASS') & (df['ofs'] == 'PASS') & (df['ffs'] == 'PASS'), 'md'] = 'PASS'
df.loc[(df['cfs'] == 'DECLINE') | (df['ofs'] == 'DECLINE') | (df['ffs'] == 'DECLINE'), 'md'] = 'DECLINE'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM