2014-11-24 94 views
2

我在尝试之前尝试过阅读类似的问题,但我仍然难住。 任何帮助appreaciated。熊猫:基于条件创建一个具有随机值的新列

输入: 我有一个数据帧熊猫与标记 '',其具有范围值的列:[0.5,13.65]

输出: 我想创建一个新的列,其中该= 0.5所有氡值被改变到一个随机的值在0.1和0.5

之间

我尝试这样做:

df['radon_adj'] = np.where(df['radon']==0.5, random.uniform(0, 0.5), df.radon) 

不过,我得到了我想这个问题,以及0.5


所有值相同的随机数。它创建随机数,但其他statment不会复制原始值将是创建你使用where选择它们之前,你可能需要的随机数

df['radon_adj'] = df['radon'].apply(lambda x: random.uniform(0, 0.5) if x == 0.5 else df.radon) 

回答

3

方式一:

>>> df = pd.DataFrame({"radon": [0.5, 0.6, 0.5, 2, 4, 13]}) 
>>> df["radon_adj"] = df["radon"].where(df["radon"] != 0.5, np.random.uniform(0.1, 0.5, len(df))) 
>>> df 
    radon radon_adj 
0 0.5 0.428039 
1 0.6 0.600000 
2 0.5 0.385021 
3 2.0 2.000000 
4 4.0 4.000000 
5 13.0 13.000000 

你可能会更聪明一点,只会产生尽可能多的随机数字,但您可能需要更长的时间输入此句子,而不是您节省的时间。 (我花了9毫秒产生〜100万的数字。)

,如果你使用的x代替df.radonapply方法将工作太:

>>> df['radon_adj'] = df['radon'].apply(lambda x: random.uniform(0.1, 0.5) if x == 0.5 else x) 
>>> df 
    radon radon_adj 
0 0.5 0.242991 
1 0.6 0.600000 
2 0.5 0.271968 
3 2.0 2.000000 
4 4.0 4.000000 
5 13.0 13.000000 
+0

是否有可能对他们有什么不同? (非修辞性的,顺便说一句 - 我不记得哪些方法是自觉的,哪些不是,我不认为'len'在意,但我不会赌二十美元。) – DSM 2014-11-24 19:59:19

+0

谢谢,@DSM。这很好。 – HolaGonzalo 2014-11-24 20:16:38

相关问题