seleccionar recorrer insertar documentacion data como columnas columna python pandas duplicates dataframe repeat

python - recorrer - Cómo repetir el marco de datos de Pandas?



seleccionar columnas de un dataframe pandas (4)

Append debería funcionar también:

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

Este es mi marco de datos que debe repetirse por 5 veces:

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

Quiero tener el resultado así:

>>> x.append(x).append(x).append(x) a b 0 1 2 0 1 2 0 1 2 0 1 2

Pero debe haber una forma más inteligente que seguir añadiendo ... En realidad, el marco de datos en el que trabajo debería repetirse 50 veces.

No he encontrado nada práctico, incluidos aquellos como np.repeat ---- simplemente no funciona en el marco de datos.

¿Alguien podría ayudar?


Creo que es más limpio / más 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]: a b 0 1 2 0 1 2 0 1 2

De manera más general, puede usar tile o repeat con 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

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


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

No conozco 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 quieras explicar mejor lo que estás tratando de lograr?


Puede usar la función 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

Si solo quiere repetir los valores y no el índice, puede hacer:

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