Как сопоставить значение в столбце с именем другого столбца, присутствующего в фрейме данных, а затем рассчитать соответствующее процентное изменение?

Я работаю над аналогичным набором данных, как указано ниже:

Я БЫстолбец1столбец2столбец3столбец4столбец5
1столбец310954
2столбец56748
3столбец3124211
4столбец495810

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

Ожидаемая выходная таблица может быть представлена ​​как:

Я БЫстолбец1столбец2столбец3столбец4столбец5процент_изменения
1столбец310954(10-9)/9*100 составляет 11,11%
2столбец56748(6-8)/8*100 равно -25%
3столбец3124211(12-4)/4*100 равно 200%
4столбец495810(9-8)/8*100 составляет 12,5%

Итак, для ID:1 col1 имеет значение col3. Таким образом, код должен найти этот col3 и вычислить процент значения под ним с помощью col2.

Точно так же для ID:2 col1 имеет значение col5, поэтому код должен найти col5 и найти процентное изменение с соответствующим значением в col2. То есть здесь столбец5 равен 8, а столбец2 равен 6. Затем вычислите процентное изменение.

Я попробовал несколько подходов, но получил неправильный результат.

Пожалуйста, помогите мне с кодом python pandas для того же.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
14
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Получите значения по уважать, а затем подсчитайте новый столбец с помощью арифметических операций:

idx, cols = pd.factorize(df['col1'])

s = df.reindex(cols, axis=1).to_numpy()[np.arange(len(df)), idx]

df['percent_change'] = df['col2'].sub(s).div(s).mul(100)

print (df)
   ID  col1  col2  col3  col4  col5  percent_change
0   1  col3    10     9     5     4       11.111111
1   2  col5     6     7     4     8      -25.000000
2   3  col3    12     4     2    11      200.000000
3   4  col4     9     5     8    10       12.500000

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