复制pandas数据框中的行

时间:2017-01-26 13:07:19

标签: python pandas

我有以下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
  ....

我收到错误 - 在我的框架中有一个colum索引号和NaN

的日期值

1 个答案:

答案 0 :(得分:2)

我认为列index不是必需的,因为np.repeat可以使用array Activs

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