Заполнение датафрейма через цикл

Встала такая задача: заполнить df через цикл на основании значения переменной i. То есть, получить что то подобное:

test1 test2 wq
0 1 30 40
1 2 40 40
2 3 50 40
3 4 60 40
4 5 70 40
5 6 80 40
6 7 90 40
7 8 100 40
8 9 110 40

а хотелось бы получать что такое

test1 test2 wq
0 1 30 0
1 2 40 5
2 3 50 10
3 4 60 15
4 5 70 20
5 6 80 25
6 7 90 30
7 8 100 35
8 9 110 40

Сам код такой получился:

import pandas as pd
df = pd.DataFrame({'test1': [1, 2, 3, 4, 5, 6, 7, 8, 9], 'test2': [30, 40, 50, 60, 70, 80, 90, 100, 110]})
for i in range(len(df)):
    df['wq'] = i*5
    
display(df)

пробовал писать df['wq',i] =... - просто насоздавалось много столбцов с обозначениями wq,1 wq,2 и т.д.

Хотелось бы узнать, как это сделать через цикл? Если есть какой то другой подход - тоже интересно!


Ответы (2 шт):

Автор решения: MaxU

Вы получили такой результат, потому что вы на каждой итерации цикла заполняете весь столбец одним значением, перезаписывая все значения в столбце. Правильно заполнить столбец в цикле можно так:

df["wq"] = -1
for i in range(len(df)):
    df.loc[i, 'wq'] = i*5

Но лучше всегда использовать векторные методы вместо циклов:

import numpy as np

df["wq"] = np.arange(0, 5 * len(df), 5)

или

df["wq"] = range(0, 5 * len(df), 5)

результат:

In [359]: df
Out[359]:
   test1  test2  wq
0      1     30   0
1      2     40   5
2      3     50  10
3      4     60  15
4      5     70  20
5      6     80  25
6      7     90  30
7      8    100  35
8      9    110  40
→ Ссылка
Автор решения: CrazyElf

Зачем все эти сложности, просто умножаете индекс на 5:

df['wq'] = df.index * 5
→ Ссылка