此代码:
data1 = {'one' : pd.Series([1., 2., 3.], index=['a', 'b', 'c']),
'two' : pd.Series([1., 2., 3.], index=['a', 'b', 'c']),
'three' : pd.Series([1., 1., 4.], index=['a', 'b', 'c'])}
df = pd.DataFrame(data1)
thirds = pd.DataFrame(1 / 3, index=df.index, columns=df.columns)
print(thirds)
打印:
one three two
a 0.333333 0.333333 0.333333
b 0.333333 0.333333 0.333333
c 0.333333 0.333333 0.333333
预期。
我正在尝试更改df数据框,以便修改系列值,使它们总和为1.最接近的是:
import numpy as np, numpy.random
data2 = {'one' : pd.Series((np.random.dirichlet(np.ones(3),size=1).flatten()), index=['a', 'b', 'c']),
'two' : pd.Series((np.random.dirichlet(np.ones(3),size=1).flatten()), index=['a', 'b', 'c']),
'three' : pd.Series((np.random.dirichlet(np.ones(3),size=1).flatten()), index=['a', 'b', 'c'])}
random01 = pd.DataFrame(d2)
print(random01)
打印哪些:
one three two
a 0.173359 0.143096 0.254052
b 0.078862 0.589361 0.700310
c 0.747778 0.267543 0.045639
这适用于3行数据,但如何将相同的修改应用于N行?那么,不是对数组中的值进行硬编码,而是动态生成它们?
答案 0 :(得分:2)
只需生成您需要的任何分布的通用随机数(例如随机均匀),然后将整个系列除以其总和。
示例:
# Generate 10 random numbers uniformly between 10 and 1.
random_stuff = pd.Series(np.random.rand(10))
# Divide by their sum
random_stuff /= random_stuff.sum()