Проблема: Я пытаюсь пройтись по циклу данных, строка за строкой, используя цикл for. Но это не работает, как хотелось бы. Я знаю, что есть iterrows () и itertuple (), с которыми я хочу поэкспериментировать для цикла for.
Можете ли вы сказать мне, где это не так?
пример данных
data3 = {"one":['101', '102', '103' , '104'],
"two":['101', '105', '106', '104'],
"three": ['102', '5', '107', '108'],
"other": ['101', '102', '103' , '104']
}
df3 = pd.DataFrame(data3)
Цель: проверить столбец «два» в каждой строке,и если значение столбца 'two' существует в столбце 'one', то создайте новый столбец 'new_col' со значением 'del'. Если значение не существует в столбце «one», создайте «new_col» как «keep». Например, если столбец 'two' имеет 101, я хочу сравнить его со всеми значениями столбца 'one'
мой код:
dfToList1 = df3['two'].tolist()
for x in dfToList1:
if x in df3['one'].values:
df3['new_col'] = 'del'
else:
df3['new_col'] = 'keep'
затемЯ могу заменить значение в 'two', которое соответствует 'one', строкой типа 'none'
df3.loc[df3['new_col'] == 'del', 'two'] = 'none'
мой вывод:
В идеале во 2-м и3-й ряд, 5 и 107 в 'two' не включают в 'one', и поэтому new_col во 2-м и 3-м ряду должен иметь значение 'keep', но я его не получаю.
one other three two new_col
0 101 101 102 101 del
1 102 102 5 105 del
2 103 103 107 106 del
3 104 104 108 104 del
ожидаемый результат
one other three two new_col
0 101 101 102 101 del
1 102 102 5 105 keep
2 103 103 107 106 keep
3 104 104 108 104 del