Вот еще одна вариация в технике, подобная Bjorn's (apphacker), которая позволяет вам назначать значение переменной внутри функции, а не передавать ее как параметр, который иногда может быть более ясным:
for (var i = 0; i < 3; i++) {
funcs[i] = (function() {
var index = i;
return function() {
console.log("My value: " + index);
}
})();
}
Обратите внимание, что любой метод, который вы используете, переменная index
становится своего рода статической переменной, связанной с возвращенной копией внутренней функции. I.e., изменения его значения сохраняются между вызовами. Это может быть очень удобно.
Вы можете использовать str.extract
с contains
и loc
с помощью boolean indexing
:
df1 = (df.AgeuponOutcome.str.extract('(\d+) (\w+)', expand=True))
df1.columns = ['a','b']
print (df1)
a b
0 1 year
1 1 year
2 2 years
3 3 weeks
4 2 years
5 1 month
6 3 weeks
7 3 weeks
8 5 months
9 1 year
10 2 years
11 2 years
12 4 years
print (df1.loc[df1.b.str.contains('month'), 'a'])
5 1
8 5
Name: a, dtype: object
print (df1.loc[df1.b.str.contains('year'), 'a'])
0 1
1 1
2 2
4 2
9 1
10 2
11 2
12 4
Name: a, dtype: object
Если вам нужны выходные данные в качестве новых столбцов:
df1['month'] = (df1.loc[df1.b.str.contains('month'), 'a'])
df1['year'] = (df1.loc[df1.b.str.contains('year'), 'a'])
df1['week'] = (df1.loc[df1.b.str.contains('week'), 'a'])
print (df1)
a b month year week
0 1 year NaN 1 NaN
1 1 year NaN 1 NaN
2 2 years NaN 2 NaN
3 3 weeks NaN NaN 3
4 2 years NaN 2 NaN
5 1 month 1 NaN NaN
6 3 weeks NaN NaN 3
7 3 weeks NaN NaN 3
8 5 months 5 NaN NaN
9 1 year NaN 1 NaN
10 2 years NaN 2 NaN
11 2 years NaN 2 NaN
12 4 years NaN 4 NaN
ИЗМЕНИТЬ по комментарию:
Вы можете использовать:
#convert to int
df1['a'] = df1.a.astype(int)
#divide by constant to column a
df1.loc[df1.b.str.contains('month'), 'a'] = df1.loc[df1.b.str.contains('month'), 'a'] / 12
df1.loc[df1.b.str.contains('week'), 'a'] = df1.loc[df1.b.str.contains('week'), 'a'] /52.1429
print (df1)
a b
0 1.000000 year
1 1.000000 year
2 2.000000 years
3 0.057534 weeks
4 2.000000 years
5 0.083333 month
6 0.057534 weeks
7 0.057534 weeks
8 0.416667 months
9 1.000000 year
10 2.000000 years
11 2.000000 years
12 4.000000 years