Я пытаюсь найти автоматически, не используя для индекса элемент списка, который содержится в определенном столбце панд в строке.
Представьте, что у меня есть список с names = ["U9", "Z9", "H10"]
и фрейм данных pandas со столбцом, который содержит следующее
dat['col1'] = ["U9", "U9", "U9", "Z9", "Z9", "H10", "H10", "H10", "H10", "H10"]
Я пытаюсь заменить первый код вторым, который начинаетсяоднако из маски я получаю следующую ошибку:
for i in range(len(dat)):
index = names.index(dat['col1'][i])
if index < len(names)-1:
dat.loc[i, 'col2'] = names[index + 1]
else:
break
mask = []
for i in range(len(dat)):
mask.append(names.index(dat['col1'][i]) < len(names) - 1)
dat['col2'] = np.where(mask, names[names.index(dat['col1'])+1], np.NaN)
Я получаю ошибку:
ValueError: Истинное значение Series является неоднозначным.Используйте a.empty, a.bool (), a.item (), a.any () или a.all ().
Это происходит потому, что names[names.index(dat['col1'])+1]
не выполняет итерацию для каждой строки в dat['col1']
.
Так что я хочу, чтобы итерация по строкам в пандах без использования для которогоупоминается ниже и присваивает dat['col2']
значения dat['col1']
, но смещенные.Ожидаемый результат должен быть как
dat['col2'] = ["Z9", "Z9", "Z9", "H10", "H10", nan, nan, nan, nan, nan]