我有一個這樣的資料框(簡化):
| | amount | other_amt | rule_id |
|---:|:--------|:----------|---------:|
| 0 | 2 | 0 | 101 |
| 1 | 20 | 0.5 | 102 |
| 2 | 300 | 0 | 0 |
| 3 | 50 | 1 | 101 |
然后,我有一組函式將這些規則中的每一個應用于資料,例如:
def rule_101(df):
return df['amount'] / 2
def rule_102(df):
return df['other_amt']
我想創建一個新列,在其中應用每個rule_xxx(df)函式,具體取決于rule_id列中的內容。我使用rule_id列的內容來呼叫創建新列的命令中的函式。就像是
df['new_col'] = np.where(df['rule_id'] == '0',
df['amount']),
locals()[f'rule_{df.rule_id}'](df))
這一點f'rule_{df.rule_id}'是什么給我帶來麻煩。它回傳完整系列,因此回傳錯誤,例如
KeyError: 'rule_0 0\n1 0\n2 0\n3 0\n4 0\n ..\n495 0\n496 0\n497 0\n498 0\n499 0\nName: rule_id, Length: 500, dtype: object'
我怎樣才能“對齊”這兩個輸入?rule_id 以便每一行的值都插入到 f 字串中,從而在該特定行上呼叫該特定 rule_id 的函式?
當然也歡迎其他方法,只要我能夠在每一行中應用與 rule_id 對應的函式即可。非常感謝
uj5u.com熱心網友回復:
您可以使用字典來查找規則:
def rule_101(df):
return df['amount'] / 2
def rule_102(df):
return df['other_amt']
ruleset = {
0: lambda k: 0,
101: rule_101,
102: rule_102
}
def rules(row):
return ruleset[row['rule_id']](row)
df['new_col'] = df.apply(rules, axis=1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/530646.html
上一篇:python和計算數字的冪
