我在尝试之前尝试过阅读类似的问题,但我仍然难过。 任何帮助都是适用的。
输入: 我有一个带有标记为“ radon ”的列的pandas数据框,其值在以下范围内:[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
的所有值,我得到相同的随机数我也试过这个。它会创建随机数,但else语句不会复制原始值
df['radon_adj'] = df['radon'].apply(lambda x: random.uniform(0, 0.5) if x == 0.5 else df.radon)
答案 0 :(得分:3)
一种方法是在使用where
选择之前创建所需的所有随机数:
>>> 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
你可能会变得更聪明,只会产生你实际需要的随机数,但是输入这个句子可能需要更长的时间才能保存。 (生成~100个数字需要9毫秒。)
如果您使用apply
代替x
,那么df.radon
方法也会有效:
>>> 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