如何通过一列中的每个值将一列随机数添加到数据框?

时间:2019-11-04 22:01:00

标签: python-3.x pandas

我有3列的数据框:经度,纬度,名称(图1)。我需要为每个名称添加一个带有随机数的“海拔”列(参见图2)。

随机数必须在200到2000之间

图1

FIG 1

图2

FIG 2

2 个答案:

答案 0 :(得分:3)

IIUC,DataFrame.groupby + $mySplat = @{ "Quiet" = $true "Param1" = "myParam1" } $mySplat.Add("Param2", "myParam2") $mySplat.Remove("Quiet"); . .\script2.ps1 @mySplat

transform

答案 1 :(得分:2)

由于您的伪数据不是可复制的格式,所以我制作了自己的数据。这是解决方案的简短版本。下面还提供了一个便捷功能( random_update_altitude() )。我还使用了便捷函数中的seed自变量来控制生成的随机序列。这将帮助您使其重现。

注意:您还可以选择随机数分布的类型:统一np.random.randnp.random.randint)或 normal ({{1 }}。

仅代码

np.random.randn

带功能的代码(易于使用)

ceiling, base = 4000, 0
for i, name in enumerate(df.names.unique()):
        height = (ceiling - base)*np.random.rand()
        df.loc[df['name']==name,'Altitude'] = height

输出
enter image description here

虚拟数据

import numpy as np
import pandas as pd

def random_update_altitude(df, column='Altitude', ceiling=4000, base=0, seed=0):
    if column not in df.columns:
        df[column] = None

    np.random.seed(seed=seed)
    for i, name in enumerate(df.name.unique()):
        height = (ceiling - base)*np.random.rand()
        df.loc[df['name']==name,'Altitude'] = height

    return df    

df = random_update_altitude(df, column='Altitude', ceiling=4000, seed=0)
print(df)

输出

def make_dummy_data():
    names = 'abcdefghijklmnopqrstuvwxyz'
    names = list(names.upper())
    df = pd.DataFrame({'name': names[:5] + names[3:7] + names[:3]})
    df = df.sort_values(by=['name']).reset_index(drop=True)
    return df

df = make_dummy_data()
print(df)