如何根据行数展开列表并放入新列

how to spead a list and put into a new column based on number of rows

假设我有一个品牌清单:

cat_list = ['a', 'b', 'ab']

我希望此列表重复填充名为 category 的新列,与我的行一样多。

我希望第一行有 'a',第二行有 'b',第三行有 'ab',循环重复直到最后一行,如下例所示:

type     value     category
a         25          a
a         25          b
a         25          ab
b         50          a
b         50          b
b         50          ab

目前我尝试过的是:

cat_list = ['a', 'b', 'ab']
df['category'] = cat_list * len(df)

但是我遇到了这种错误

Length of values does not match length of index

我应该如何修正我的脚本以获得预期的结果?

谢谢。

使用numpy.tile重复,重复次数为整数除法:

df = pd.DataFrame({'a':range(8)})

cat_list = ['a', 'b', 'ab']
df['category'] = np.tile(cat_list, (len(df.index) // len(cat_list)) + 1)[:len(df.index)]
print (df)
   a category
0  0        a
1  1        b
2  2       ab
3  3        a
4  4        b
5  5       ab
6  6        a
7  7        b