需要根据分类列将薪资金额转换为年薪:
- ‘M’ – 每月
- ‘Y’ – 每年
- ‘W’ – 每周
- ‘B’ – 每两周
df = pd.DataFrame({'Name':['A','B','C','D','E'], 'sal_amt':[4500,50000,2000,3000,5000], 'sal_md':['M','Y','W','B','M']})df.head()#定义一个函数来解决我的问题...def func(row): if row['sal_md'] == 'M': return (row['sal_amt']*12) elif row['sal_md'] =='Y': return row['sal_amt'] elif row['sal_md'] == 'H': return (row['sal_amt']*8760) elif row['sal_md'] == 'W': return (row['sal_amt']*52) elif row['sal_md'] == 'B': return (row['sal_amt']*26) elif row['sal_md'] == 'S': return row['sal_amt'] elif row['sal_md'] == 'A': return row['sal_amt']df['sal_annual'] = df.apply(func,axis=1)
https://i.sstatic.net/INXva.png
回答:
In [1]: import pandas as pdIn [2]: df = pd.DataFrame({'Name':['A','B','C','D','E'], 'sal_amt':[4500,50000,2000,3000,5000], 'sal_md':['M','Y','W','B','M']})In [3]: multiplier_dict = {'M':12, 'Y':1, 'W':52, 'B':26}In [4]: df['sal_multiplier'] = df.sal_md.map(multiplier_dict)In [5]: df['sal_annual'] = df.sal_amt*df.sal_multiplierIn [6]: df.head()Out[6]: Name sal_amt sal_md sal_multiplier sal_annual0 A 4500 M 12 540001 B 50000 Y 1 500002 C 2000 W 52 1040003 D 3000 B 26 780004 E 5000 M 12 60000
虽然这不是你所问的,但它以一种简单且符合Python风格的方式精确地解决了你的问题。