熊猫根据其他列更改列值

时间:2021-04-17 23:25:58

标签: python pandas dataframe random multiple-columns

我正在尝试使用 [tranches_age] 列中定义的范围内的随机数更改 [age] 值

<头>
index 年龄 tranches_age
1 NaN 80-85
2 NaN 70-75
3 NaN 30-35

enter image description here

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

计算范围的 minwidth,然后使用 (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

答案 2 :(得分:1)

试试 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