панды изменяют значение столбца на основе другого столбца

#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