pd.DataFrameを構築し、その中にレプリケート数を増やすたびに異なる数を取得したいとします。 (Rの再現可能な例のためにスクロールダウンしてください)Rのreplicate関数とdo.call関数がPythonで同等である
私はPythonで同じ出力を得たいと思いますが、そこに着く方法は分かりません!
あなたはこの単純なpd.Dataframe
df = pd.DataFrame({
'a':[np.random.normal(0.27,0.01,5),np.random.normal(1,0.01,5)]})
df
a
0 [0.268297564096, 0.252974100195, 0.27613413347...
1 [0.996267313891, 1.00497494738, 1.022271644, 1...
を考えると、私は、データが次のようになり、なぜ知りません。私は一つだけnp.random.normal
私はこれを取得していない場合は、
a
0 0.092309
1 0.085985
2 0.083635
3 0.081582
4 0.104096
申し訳ありませんが、私はこのbehaviour.Iを説明することはできませんpandas
に新しい午前多分あなたはこれを説明することができます。
元に戻すことができます。あなたは数字の第2のグループを生成したいと私はnp.repeat
df = pd.DataFrame({['a':np.repeat(np.random.normal(0.10,0.01,5),np.random.normal(0.10,0.01,5)])})
df
Out[59]:
a
0 0.090305
1 0.090305
2 0.109092
3 0.109092
4 0.101706
5 0.101706
6 0.087357
7 0.087357
8 0.099094
9 0.099094
10 0.101595
11 0.101595
12 0.100343
13 0.100343
14 0.085380
15 0.085380
16 0.102118
17 0.102118
18 0.107328
19 0.107328
を使用する必要がありますね。しかし2回だけ同じ番号を生成しているnp.repeat場合
は、私が欲しいものは出力されません。ここ
はあなたが非常に簡単にこれを行うことができますRに基本的に
df <- data.frame(y = do.call(c,replicate(n = 2,
expr = c(rnorm(5,0.10,0.01),rnorm(5,1,0.01)),
simplify = FALSE)),gr = rep(seq(1,2),each=10))
y gr
1 0.11300203 1
2 0.11840556 1
3 0.09420799 1
4 0.10480623 1
5 0.08561427 1
6 1.00076001 1
7 1.00035891 1
8 1.00936751 1
9 1.00050563 1
10 1.00564799 1
11 0.09415217 2
12 0.10794155 2
13 0.11534605 2
14 0.08806740 2
15 0.12394189 2
16 0.99330066 2
17 0.98254134 2
18 0.99828079 2
19 1.00786526 2
20 0.97864180 2
、Rの場合にはアプローチです。しかし、私はPythonでは、関数を書く必要があると思います。
Rでは、rnorm
で数値の正規分布を生成することができ、numpy
ではnp.random.normal
でそれを行うことができます。しかし、私は特にdo.call
のために組み込まれた関数を見つけることができませんでした。
うわー、私はそれが「パンダ」で同じデータフレームを作成するよりも複雑であることを知っていました。 'gr'カラムも追加できますか? – Alexander
あなたが 'for xrange(2)'について説明できるなら、私は感謝しますか?私がOPの最初の部分で言及した事柄には何らかの理由がありますか? – Alexander