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
这个特性可能不太美观,但它有一个好处就是你不需要担心DataFrame的长度是否是重复值长度的倍数。 np.put
会根据需要重复这些值。
我的第一个回答是:
import itertools as IT
df['second'] = list(IT.islice(IT.cycle([1,2,3]), len(df)))
但事实证明,这种方法的速度明显较慢:
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
len(df)
不是列表长度的完美倍数,请查看此答案。 - cs95