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
似乎没有优雅的方式。这是我刚想出的解决办法。基本上是创建一个比原始数据帧稍大的重复列表,然后左键连接它们。
itertools的循环方法有利于重复一个常见的模式。
收益率
不是特别漂亮,但它拥有的一个“特性”是,如果数据帧的长度是重复值长度的倍数,则不必担心。
np.put
根据需要重复这些值。我的第一个回答是:
但事实证明,这要慢得多:
相关问题 更多 >
编程相关推荐