【问题标题】:pandas change column value based on other column熊猫根据其他列更改列值
【发布时间】:2021-04-17 23:25:58
【问题描述】:

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

index age tranches_age
1 NaN 80-85
2 NaN 70-75
3 NaN 30-35

【问题讨论】:

    标签: python pandas dataframe random multiple-columns


    【解决方案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】:

      计算范围的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
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2018-10-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-11
          • 1970-01-01
          • 2020-04-13
          • 2020-10-21
          • 2018-04-26
          相关资源
          最近更新 更多