2017-01-26 2 views
2

У меня есть следующий DataFrame:Репликация строк в кадре панды данных

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 
    .... 

я получаю ошибку - в моем кадре значение даты в индексном Колуме и NaN

ответ

2

Я думаю, что колонна index не является необходимой, для np.repeat возможно использование 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 
Смежные вопросы