これは、5回繰り返す必要がある私のデータフレームです。
>>> x = pd.DataFrame({'a':1,'b':2},index = range(1))
>>> x
a b
0 1 2
私はこのような結果が欲しい:
>>> x.append(x).append(x).append(x)
a b
0 1 2
0 1 2
0 1 2
0 1 2
ただし、追加し続けるよりも賢い方法が必要です。実際には、作業中のデータフレームImを50回繰り返す必要があります。
np.repeat
のようなものを含めて、実用的なものは見つかりませんでした----データフレームでは機能しません。
誰も助けてもらえますか?
concat
関数を使用できます。
In [13]: pd.concat([x]*5)
Out[13]:
a b
0 1 2
0 1 2
0 1 2
0 1 2
0 1 2
インデックスではなく値のみを繰り返したい場合は、次のようにします。
In [14]: pd.concat([x]*5, ignore_index=True)
Out[14]:
a b
0 1 2
1 1 2
2 1 2
3 1 2
4 1 2
iloc
を使用する方がよりクリーンで速いと思う
In [11]: np.full(3, 0)
Out[11]: array([0, 0, 0])
In [12]: x.iloc[np.full(3, 0)]
Out[12]:
a b
0 1 2
0 1 2
0 1 2
より一般的には、 tile
または repeat
を arange
と組み合わせて使用できます。
In [21]: df = pd.DataFrame([[1, 2], [3, 4]], columns=["A", "B"])
In [22]: df
Out[22]:
A B
0 1 2
1 3 4
In [23]: np.tile(np.arange(len(df)), 3)
Out[23]: array([0, 1, 0, 1, 0, 1])
In [24]: np.repeat(np.arange(len(df)), 3)
Out[24]: array([0, 0, 0, 1, 1, 1])
In [25]: df.iloc[np.tile(np.arange(len(df)), 3)]
Out[25]:
A B
0 1 2
1 3 4
0 1 2
1 3 4
0 1 2
1 3 4
In [26]: df.iloc[np.repeat(np.arange(len(df)), 3)]
Out[26]:
A B
0 1 2
0 1 2
0 1 2
1 3 4
1 3 4
1 3 4
注:これは、整数以外のインデックス付きDataFrame(およびSeries)で機能します。
あなたの問題が本当にそれを必要としない限り、私は一般的に繰り返したり追加したりしません-それは非常に非効率的であり、通常は問題を攻撃する適切な方法を理解していないことに由来します。
正確なユースケースはわかりませんが、値が次のように保存されている場合
values = array(1, 2)
df2 = pd.DataFrame(index=arange(0,50), columns=['a', 'b'])
df2[['a', 'b']] = values
仕事をします。おそらく、あなたが達成しようとしていることをよりよく説明したいですか?
>>> df=pd.DataFrame(pd.np.repeat(x.values,5,axis=0),columns=x.columns)
>>> df
a b
0 1 2
1 1 2
2 1 2
3 1 2
4 1 2
>>>
追加も機能するはずです:
In [589]: x = pd.DataFrame({'a':1,'b':2},index = range(1))
In [590]: x
Out[590]:
a b
0 1 2
In [591]: x.append([x]*5, ignore_index=True) #Ignores the index as per your need
Out[591]:
a b
0 1 2
1 1 2
2 1 2
3 1 2
4 1 2
5 1 2
In [592]: x.append([x]*5)
Out[592]:
a b
0 1 2
0 1 2
0 1 2
0 1 2
0 1 2
0 1 2