2017-05-26 37 views
0

此代碼:更新數據幀包含隨機值即總和爲1

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行?因此,不是硬編碼數組中的值,而是動態生成它們?

回答

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() 
+0

可以提供一個例子? –

+0

當然,我已經添加了一個。 – Lagerbaer