Вы вводите в заблуждение поэтапное умножение и умножение матрицы (см. ?"*"
). Вы хотите %*%
:
> a[3,]%*%a[,3]
[,1]
[1,] 150
assign
Это работает только для примера OP, где длина lst
совпадает с кадром данных df
df.assign(col1=lst)
col1 col2
0 new1 test1
1 new2 test2
2 new3 test3
3 new4 test4
4 new5 test5
Это более общее. Если вы не используете Python 3.6 и у вас есть f-строки, вы можете использовать str.format
df.assign(col1=[f'new{i+1}' for i in range(len(df))])
# df.assign(col1=[*map('new{}'.format, range(1, len(df) + 1))])
col1 col2
0 new1 test1
1 new2 test2
2 new3 test3
3 new4 test4
4 new5 test5
itertools
. Если вы хотите просто повторить список, вы получил, я бы использовал itertools
islice
и cycle
from itertools import cycle, islice
df.assign(col1=[*islice(cycle(lst), len(df))])
col1 col2
0 new1 test1
1 new2 test2
2 new3 test3
3 new4 test4
4 new5 test5
В одну сторону от numpy.put
lst = ['new1','new2']
np.put(df['col1'],np.arange(len(df)),lst)
df
Out[37]:
col1 col2
0 new1 test1
1 new2 test2
2 new1 test3
3 new2 test4
4 new1 test5
<час> Другой вариант
n=len(df)
df['col1']=(lst*((n//len(lst))+1))[:n]
df
Out[48]:
col1 col2
0 new1 test1
1 new2 test2
2 new1 test3
3 new2 test4
4 new1 test5