创建具有原始值的新pandas列以及错误范围中的随机数

时间:2018-01-03 20:09:47

标签: python pandas numpy

我有一个pandas数据帧,它有一个'INTENSITY'列和一个相同长度的numpy数组,包含每个强度的错误。我想生成在错误范围内随机生成数字的列。

到目前为止,我使用两个嵌套for循环来创建新列,但我觉得这样效率很低:

<div contenteditable="true">
  This text can be edited by the user.
</div>

有没有更有效的方法来解决这样的问题?

2 个答案:

答案 0 :(得分:0)

Numpy可以为您处理数组。所以,你可以这样做:

import pandas as pd
import numpy as np
a=pd.DataFrame([10,20,15,30],columns=['INTENSITY'])
a['theor_err']=np.sqrt(np.abs(a.INTENSITY))
a['sample']=np.random.uniform(-a['theor_err'],a['theor_err'])

答案 1 :(得分:0)

假设您要生成6个样本。您可以尝试在下面编码。您可以通过设置值k来调整所需的样本数。

df = pd.DataFrame([[1],[2],[3],[4],[-5]], columns=["intensity"])
k = 6
sample_names = ["sample" + str(i+1) for i in range(k)]
df["err"] = np.sqrt(np.abs((df["intensity"])))
df[sample_names] = pd.DataFrame(
              df["err"].map(lambda x: np.random.uniform(-x, x, k)).values.tolist())
df.loc[:,sample_names] = df.loc[:,sample_names].add(df.intensity, axis=0)

enter image description here