1 回答

TA贡献1906条经验 获得超10个赞
诀窍是lambda完全删除。将您的函数提供给,pd.DataFrame.apply并可能将您的附加函数参数apply直接提供给:
def apply_rate(row, col1, col2):
if row[col2]=='Manager': return row[col1]*165
else: return row[col1]*135
df['TOTAL'] = df.apply(apply_rate, axis=1, col1='HOURS', col2='ROLE')
print(df)
NAME HOURS ROLE TOTAL
0 A 38 Manager 6270
1 B 52 Expert 7020
2 C 1040 Expert 140400
3 D 28 Expert 3780
但是,逐行操作效率低下,不推荐使用 Pandas。您可以使用按列操作轻松矢量化您的算法:
df['TOTAL'] = df['HOURS'] * np.where(df['ROLE'] == 'Manager', 165, 135)
另一种更容易扩展的版本可以使用字典映射:
factor_map = {'Manager': 165}
df['TOTAL'] = df['HOURS'] * df['ROLE'].map(factor_map).fillna(135)
添加回答
举报