У нас есть фрейм данных с тремя разными столбцами, как показано в примере выше ( df ).
Цель этой задачи - заменить первый элемент столбца 2 на np.nan при каждом изменении буквы в столбце 1 . Поскольку исследуемая база данных очень большая, ее нельзя использовать для цикла for. Также исключается любое решение, включающее сдвиг, потому что оно слишком медленное
Я считаю, что самый простой способ - это использовать groupby и head метод, однако я не знаю, как заменить в исходном фрейме данных.
Примеры:
df = pd.DataFrame([['A','Z',1.11],['B','Z',2.1],['C','Z',3.1],['D', 'X', 2.1], ['E','X',4.3],['E', 'X', 2.1], ['F','X',4.3]])
![enter image description here](https://i.stack.imgur.com/fiTDK.png)
чтобы выбрать элементы, которые мы хотим изменить, мы можем сделать следующее:
df.groupby(by=1).head(1)[2] = np.nan
Однако в исходном кадре данных ничего не меняется.
Цель состоит в том, чтобы получить следующее:
![enter image description here](https://i.stack.imgur.com/Q5i3p.png)
Edit:
Исходя из комментариев, мы не будем df[1]
возвращаться в группу, которую уже видели, например, ['Z', 'Z', 'X', 'Z']
невозможно.