Python 在列中将不同的薪资类型(每年、每月等)转换为每月

Python 在列中将不同的薪资类型(每年、每月等)转换为每月,python,pandas,Python,Pandas,我勉强挣了一些工作的薪水。数据有几种格式(例如,每月、每年、每天)。我想把一切标准化到一个月 jobs_df['salary'] 7 7000 - 8000 a month 9 50000 - 80000 a year 5 80000 - 90000 a year 5 25000 - 28000 a year 4 450 - 600 a day 5 32925 a year 9

我勉强挣了一些工作的薪水。数据有几种格式(例如,每月、每年、每天)。我想把一切标准化到一个月

jobs_df['salary']
7       7000 -  8000 a month
9       50000 - 80000 a year
5       80000 - 90000 a year
5       25000 - 28000 a year
4            450 - 600 a day
5               32925 a year
9               48300 a year
我的计划是
jobs\u df['salary'].str.split('-)
并取工资的平均值。然而,像‘一个月’、‘一年’、‘一天’这样的文字的出现让我感到困惑。什么是pythonic方法来解决这个问题?

您可以使用或for get
numeric
,转换为
floats
和last get
mean

jobs_df['new'] = pd.DataFrame(jobs_df['salary'].str.findall('(\d+)').values.tolist(),
                              index=jobs_df.index).astype(float).mean(1)
print (jobs_df)
                    salary      new
0     7000 -  8000 a month   7500.0
1     50000 - 80000 a year  65000.0
2     80000 - 90000 a year  85000.0
3     25000 - 28000 a year  26500.0
4          450 - 600 a day    525.0
5             32925 a year  32925.0
6             48300 a year  48300.0
或:

编辑:


这是正确的,但不包括工资/日、年、月。耶兹雷尔或许也能以一种非常好的方式解决这个问题(添加一个乘数)+1@AntonvBR我应该如何处理这个问题<代码>如果df['salary']中有'month',那么df['new']*12这是一个好方法吗?@AntonvBR-Thanks@JamesSoh-还需要多个
df['new']*365天?
jobs_df['new'] = jobs_df['salary'].str.extractall('(\d+)')[0].unstack().astype(float).mean(1)
print (jobs_df)
                    salary      new
0     7000 -  8000 a month   7500.0
1     50000 - 80000 a year  65000.0
2     80000 - 90000 a year  85000.0
3     25000 - 28000 a year  26500.0
4          450 - 600 a day    525.0
5             32925 a year  32925.0
6             48300 a year  48300.0
m1 = jobs_df['salary'].str.contains('month')
m2 = jobs_df['salary'].str.contains('day')
jobs_df['fin'] =np.select([m1, m2], 
                          [jobs_df['new'] * 12,jobs_df['new'] * 365], default=jobs_df['new'])
print (jobs_df)
                    salary      new       fin
0     7000 -  8000 a month   7500.0   90000.0
1     50000 - 80000 a year  65000.0   65000.0
2     80000 - 90000 a year  85000.0   85000.0
3     25000 - 28000 a year  26500.0   26500.0
4          450 - 600 a day    525.0  191625.0
5             32925 a year  32925.0   32925.0
6             48300 a year  48300.0   48300.0