Repetición de conteos en el dataframe de Pandas

import pandas as pd df = pd.DataFrame({ 'item':['a','b','c','d','e','f','g','h','i','k'], 'counter':[1,2,3,1,2,3,1,2,3,1] }) 

Dada esta estructura, ¿cuál es la mejor manera de generar automáticamente df['counter'] como un rango de repetición de enteros, pasando por 1, 2 y 3 hasta que llegue a la última fila?

Tu puedes hacer:

 df["counter_gen"] = df.index % 3 + 1 

+1 se librará del cero ya que el mod comienza desde cero, y el 3 lo determina usted.

Mediante el uso de np.put

 a=df.index.values a Out[637]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=int64) np.put(a,a,np.array([1,2,3])) a Out[639]: array([1, 2, 3, 1, 2, 3, 1, 2, 3, 1], dtype=int64) df['New']=a df Out[641]: counter item New 1 1 a 1 2 2 b 2 3 3 c 3 1 1 d 1 2 2 e 2 3 3 f 3 1 1 g 1 2 2 h 2 3 3 i 3 1 1 k 1 

Si el rendimiento es crucial, puede hacer uso de algo como

 np.repeat([[1, 2, 3]], len(df)/3 + 1, 0).ravel() 

Para un dataframe de 10 ^ 6 de longitud, es aproximadamente 8 veces más rápido de generar que el df.index % 3 (mucho más elegante).