2017-01-26 9 views
2

私は、次のデータフレームがあります。複製行

N numbers 
n1 1,2,3 
n2 4,6,2 
n4 2,5 
.... 


frequency=[0.45, 0.5, 0.05] 
Activ = [ 1,  2,  3] 

df = shuffle(df)[:20] 

Activs=np.random.choice(Activ , len(df), p=frequency) 
df['index']=pd.Series(Activs.tolist()) 

df_new = df.loc[np.repeat(df.index.values,df.index)] 

を私はのタイプのデータフレームを取得したい:

df_new: 
N numbers index 
n1 1,2,3  3 
n1 1,2,3  3 
n2 4,6,2  2 
n2 4,6,2  2 
n2 4,6,2  2 
n1 1,2,3  1 
n4 2,5  2 
    .... 

私はエラーを取得する - 私のフレームに私は列indexnp.repeatのために、必要ないと思うcolumインデックス番号とはNaN

答えて

2

の日付値は、可能な使用がarrayActivsです:

df = pd.DataFrame({'numbers': ['1,2,3', '4,6,2', '2,5'], 'N': ['n1', 'n2', 'n4']}) 
print (df) 
    N numbers 
0 n1 1,2,3 
1 n2 4,6,2 
2 n4  2,5 

frequency=[0.45, 0.5, 0.05] 
Activ = [ 1,  2,  3] 

df = df[:20] 

#for testing 
np.random.seed(100) 
Activs=np.random.choice(Activ , len(df.index), p=frequency) 
print (Activs) 
[2 1 1] 

df_new = df.loc[np.repeat(df.index,Activs)] 
print (df_new) 
    N numbers 
0 n1 1,2,3 
0 n1 1,2,3 
1 n2 4,6,2 
2 n4  2,5 

しかし、本当に必要でない場合は、より良いActivsから新しい列を、必要な場合はしてはいけない名前indexを使用している - 例えば名前はval

np.random.seed(100) 
Activs=np.random.choice(Activ , len(df.index), p=frequency) 
print (Activs) 
[2 1 1] 
df['val'] = Activs 

df_new = df.loc[np.repeat(df.index,Activs)] 
print (df_new) 
    N numbers val 
0 n1 1,2,3 2 
0 n1 1,2,3 2 
1 n2 4,6,2 1 
2 n4  2,5 1