あなたは、numeric
を得るためfindall
またはextractall
を使用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
EDIT:
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
はありがとうございました。私は何時間もここにこだわっていた。 –
これは正しいですが、給与/日、年、月を考慮していません。 Jezraelはおそらくそれを非常にうまくやって乗数を加えて解決することができます。 :) +1 –
@AntonvBR私はこれにどのようにアプローチすべきですか? 'df ['salary']にdf ['new'] * 12'がある場合、これは良いアプローチですか? –