¿Cómo repetir el dataframe de Pandas?

Este es mi dataframe que debe repetirse 5 veces:

>>> x = pd.DataFrame({'a':1,'b':2},index = range(1)) >>> x ab 0 1 2 

Quiero tener el resultado como este:

 >>> x.append(x).append(x).append(x) ab 0 1 2 0 1 2 0 1 2 0 1 2 

Pero debe haber una manera más inteligente que seguir agregando … En realidad, el dataframe en el que estoy trabajando debe repetirse 50 veces …

No he encontrado nada práctico, incluyendo aquellos como np.repeat —- simplemente no funciona en el dataframe.

¿Alguien podría ayudar?

    Puedes usar la función concat :

     In [13]: pd.concat([x]*5) Out[13]: ab 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 

    Si solo desea repetir los valores y no el índice, puede hacerlo:

     In [14]: pd.concat([x]*5, ignore_index=True) Out[14]: ab 0 1 2 1 1 2 2 1 2 3 1 2 4 1 2 

    Creo que es más limpio / rápido usar iloc hoy en día:

     In [11]: np.full(3, 0) Out[11]: array([0, 0, 0]) In [12]: x.iloc[np.full(3, 0)] Out[12]: ab 0 1 2 0 1 2 0 1 2 

    Más generalmente, puedes usar tile o repeat con un arange :

     In [21]: df = pd.DataFrame([[1, 2], [3, 4]], columns=["A", "B"]) In [22]: df Out[22]: AB 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]: AB 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]: AB 0 1 2 0 1 2 0 1 2 1 3 4 1 3 4 1 3 4 

    Nota: Esto funcionará con DataFrames (y Series) indexados no enteros.

    Por lo general, no repetiría ni agregaría, a menos que su problema realmente lo haga necesario, es altamente ineficiente y generalmente proviene de no entender la forma correcta de atacar un problema.

    No sé su caso de uso exacto, pero si tiene sus valores almacenados como

     values = array(1, 2) df2 = pd.DataFrame(index=arange(0,50), columns=['a', 'b']) df2[['a', 'b']] = values 

    Hará el trabajo. ¿Quizás quieres explicar mejor lo que estás tratando de lograr?

    Anexar debería funcionar también:

     In [589]: x = pd.DataFrame({'a':1,'b':2},index = range(1)) In [590]: x Out[590]: ab 0 1 2 In [591]: x.append([x]*5, ignore_index=True) #Ignores the index as per your need Out[591]: ab 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]: ab 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 

    Trate de usar numpy.repeat

     >>> df=pd.DataFrame(pd.np.repeat(x.values,5,axis=0),columns=x.columns) >>> df ab 0 1 2 1 1 2 2 1 2 3 1 2 4 1 2 >>>