Я сталкиваюсь с проблемой при переборе строк в фрейме данных pandas.
это код, который я пытаюсь запустить
data = {'test':[1,1,0,0,3,1,0,3,0],
'test2':[0, 2, 0,1,1,2,7,3,2],
}
df = pd.DataFrame(data)
df['combined'] = df['test'] +df['test2']
df['combined'].astype('float64')
df
for index, row in df.iterrows():
if row['test']>=1 & row['test2']>=1:
row['combined']/=2
else:
pass
поэтому он должен делиться на 2, если и test, и test2 имеют значение 1 или более, однако он не делит все строки, которые должны быть разделены.
я где-то ошибаюсь?
это результат, когда я запускаю код соответствующие столбцы - тест, тест2 и комбинированный
0 1 0 1
1 1 2 3
2 0 0 0
3 0 1 1
4 3 1 2
5 1 2 3
6 0 7 7
7 3 3 3
8 0 2 2
То, что вы делаете, в целом является плохой практикой, поскольку следует избегать повторения строк по соображениям производительности, если это не является строго необходимым, решение определяет маску с вашими условиями и работает в маске с использованием .loc:
data = {'test':[1,1,0,0,3,1,0,3,0],
'test2':[0, 2, 0,1,1,2,7,3,2],
}
df = pd.DataFrame(data)
df['combined'] = df['test'] +df['test2']
df['combined'].astype('float64')
mask = (df['test']>=1) & (df['test2']>=1)
df.loc[mask,'combined'] /=2
Вы используете &
, побитовый оператор AND. Вы должны использовать and
, логический оператор AND. Это приводит к тому, что оператор if
дает ответ, которого вы не ожидаете.