Заполнение датафрейма через цикл
Встала такая задача: заполнить 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 шт):
Вы получили такой результат, потому что вы на каждой итерации цикла заполняете весь столбец одним значением, перезаписывая все значения в столбце. Правильно заполнить столбец в цикле можно так:
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
Зачем все эти сложности, просто умножаете индекс на 5:
df['wq'] = df.index * 5