我想用遵循正态分布的数字填充数据框。目前,我正在随机填充它,但是分布是平坦的。 a列的均值和标准差分别为5和1,b列的均值和标准差分别为15和1。
import pandas as pd
import numpy as np
n = 10
df = pd.DataFrame(dict(
a=np.random.randint(1,10,size=n),
b=np.random.randint(100,110,size=n)
))
答案 0 :(得分:2)
这应该有效;
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
n = 200
df = pd.DataFrame(dict(
a=np.random.normal(1,10,size=n),
b=np.random.normal(100,110,size=n)
))
plt.style.use("ggplot")
fig, ax = plt.subplots()
ax.plot(df["a"])
ax.plot(df["b"], color="b")
plt.show()
plt.clf()
答案 1 :(得分:1)
尝试一下。 randint
没有从普通距离中选择。 normal
可以。同样也不知道您在min
和max
的参数中为b
提出了100和110。
n = 10
a_bar = 5; a_sd = 1
b_bar = 15; b_sd = 1
df = pd.DataFrame(dict(a=np.random.normal(a_bar, a_sd, size=n),
b=np.random.normal(b_bar, b_sd, size=n)),
columns=['a', 'b'])
答案 2 :(得分:1)
我认为您使用了错误的numpy函数:np.random.randint
从离散均匀分布返回随机整数。如果您想要随机的正常分布,则需要使用np.random.normal
,即:
import pandas as pd
import numpy as np
n = 10
df = pd.DataFrame(dict(
a=np.random.normal(loc=5,scale=1,size=n),
b=np.random.normal(15,1,size=n)
))
其中loc
对应于平均值,scale
对应于分布的标准偏差值。