import pandas as pd
import numpy as np
def put(df, column, values):
df[column] = 0
np.put(df[column], np.arange(len(df)), values)
df = pd.DataFrame({'first':range(1, 8)})
put(df, 'second', [1,2,3])
first second
0 1 1
1 2 2
2 3 3
3 4 1
4 5 2
5 6 3
6 7 1
Nicht besonders schön, aber ein „Feature“ ergibt es besitzt, ist, dass Sie sich keine Sorgen machen, wenn die Länge des Datenrahmens ist ein Vielfaches der Länge die wiederholten Werte. np.put
wiederholt die Werte wie erforderlich.
Meine erste Antwort war:
import itertools as IT
df['second'] = list(IT.islice(IT.cycle([1,2,3]), len(df)))
aber es stellt sich heraus, das ist deutlich langsamer:
In [312]: df = pd.DataFrame({'first':range(10**6)})
In [313]: %timeit df['second'] = list(IT.islice(IT.cycle([1,2,3]), len(df)))
10 loops, best of 3: 143 ms per loop
In [316]: %timeit df['second'] = 0; np.put(df['second'], np.arange(N), [1,2,3])
10 loops, best of 3: 27.9 ms per loop
+1. Ich mag diesen Ansatz. –