我已经刮掉了一些工作薪水。数据采用几种格式(例如,每月,每年,每天)。我想将所有内容标准化到一个月。

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_df['salary'].str.split('-)取薪水的平均值。但是,诸如“一个月”,“一年”,“一天”之类的文字的出现使我不寒而栗。解决此问题的有效方法是什么?

最佳答案

您可以使用findallextractall来获取numeric,转换为floats并最后获取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


要么:

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

关于python - 在 Pandas 列中将不同的薪水类型(每年,每月等)转换为月薪,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46946677/

10-11 10:18