Изменить значение столбца, если значение существует в другом столбце

Учитывая следующие панды df -

Холдинг аккаунтатип аккаунтаКолонка АКолонка Б
Руперт 06 (23938996)Холдинг аккаунта18259731702598
Руперт 07 (23938996)Холдинг аккаунта16978701825973
----
Кэролайн 06 (0131465)Холдинг аккаунта111122225435450
Кэролайн 07 (0131465)Холдинг аккаунта789654511112222

Я пытаюсь найти способ сделать следующее:

  • Шаг 1. Для всего df найдите экземпляры значений столбца B, появляющиеся в столбце A
    (пример: столбец B в Caroline 07 == столбец A в Caroline 06)
  • Шаг 2. В строках, соответствующих вышеуказанным критериям, значение столбца B должно быть изменено на значение столбца B строки, которой они соответствуют
    (пример: Caroline 7 Значение столбца B изменится с 11112222 на 5435450

Это означает, что панды df теперь будут выглядеть следующим образом:

Холдинг аккаунтатип аккаунтаКолонка АКолонка Б
Руперт 06 (23938996)Холдинг аккаунта18259731702598
Руперт 07 (23938996)Холдинг аккаунта16978701702598
----
Кэролайн 06 (0131465)Холдинг аккаунта111122225435450
Кэролайн 07 (0131465)Холдинг аккаунта78965455435450

Есть ли у кого-нибудь предложения о том, как я могу добиться такого результата?

Полезная информация:

  • Дайпс = object
0
0
39
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Пожалуйста, попробуйте это:

import numpy as np
df['Column B'] = np.where(df['Column B'].isin(df['Column A'].values),df['Column B'].shift(),df['Column B'])

Большое спасибо за это! Если я могу спросить, как бы я расширил этот код, чтобы вся строка, значение столбца B которой было перенесено, также была удалена? Чтобы использовать пример, который я привел в своем вопросе, - как удалить строки Rupert 06 (23938996) и Caroline 06 (0131465)?

William 23.03.2022 00:43

пожалуйста, попробуйте это после опубликованного блока кода: df = df.drop_duplicates(subset=['Column B'],keep='last')

prahasanam_boi 23.03.2022 03:13

Мой набор данных состоит из 7000 строк (выше был отрывок), и этот блок кода, кажется, удаляет большинство строк, чего не должно быть. Любая идея, почему 2-й блок кода будет делать это? Я только пытаюсь удалить строки, значение столбца B которых было перенесено в другую строку, если это имеет смысл.

William 23.03.2022 04:27

Это связано с тем, что ваш набор данных имеет много повторяющихся значений в столбце B. В этом случае я рекомендую вам предоставить здесь воспроизводимое подмножество фрейма данных, чтобы получить более точное решение.

prahasanam_boi 23.03.2022 04:36

Другие вопросы по теме