#python #pandas #dataframe #random #multiple-columns
Вопрос:
Я пытаюсь изменить значения [возраст] со случайным числом в диапазоне, определенном в столбце [tranches_age]
Указатель | возраст | размер траншей |
---|---|---|
1 | NaN | 80-85 |
2 | NaN | 70-75 |
3 | NaN | 30-35 |
Ответ №1:
Воспользуйся apply
df = pd.DataFrame([
[1, None, '80-85'],
[2, None, '70-75'],
[3, None, '30-35']],
columns=['index', 'age', 'tranches_age']
)
def transform(x):
agemin, agemax = map(int, x.split('-'))
return random.randint(agemin, agemax)
df['age'] = df['tranches_age'].apply(transform)
Следует выводить такие вещи, как
index age tranches_age
0 1 85 80-85
1 2 71 70-75
2 3 35 30-35
и т.д.
Ответ №2:
Вычислите min
и width
из диапазона, а затем сгенерируйте случайное число с помощью (min width*np.random.random())
. Мы можем векторизовать эти операции и, следовательно, повысить производительность.
Воспользуйся:
min_r = df.tranches_age.str[:2].astype(int)
widths = df.tranches_age.str[3:].astype(int) - min_r
df['age'] = (min_r widths* np.random.random(size=(widths.shape[0]))).astype(int)
Выход:
>>> df
index age tranches_age
0 1 82 80-85
1 2 70 70-75
2 3 31 30-35
Ответ №3:
Попробуйте с numpy
random.randint
df['new'] = df['tranches_age'].apply(lambda x : np.random.randint(low=x.split('-')[0],high=x.split('-')[1]))
0 83
1 72
2 32
Name: tranches_age, dtype: int64