我有一个pandas数据帧,它有一个'INTENSITY'列和一个相同长度的numpy数组,包含每个强度的错误。我想生成在错误范围内随机生成数字的列。
到目前为止,我使用两个嵌套for循环来创建新列,但我觉得这样效率很低:
<div contenteditable="true">
This text can be edited by the user.
</div>
有没有更有效的方法来解决这样的问题?
答案 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)