Я работаю над аналогичным набором данных, как указано ниже:
| Я БЫ | столбец1 | столбец2 | столбец3 | столбец4 | столбец5 |
|---|---|---|---|---|---|
| 1 | столбец3 | 10 | 9 | 5 | 4 |
| 2 | столбец5 | 6 | 7 | 4 | 8 |
| 3 | столбец3 | 12 | 4 | 2 | 11 |
| 4 | столбец4 | 9 | 5 | 8 | 10 |
В col1 данные имеют значения некоторых имен столбцов одного и того же фрейма данных. Мне нужно сопоставить значения в col1 с фактическими именами столбца в фрейме данных, а затем вычислить процентное изменение значений с помощью col2.
Ожидаемая выходная таблица может быть представлена как:
| Я БЫ | столбец1 | столбец2 | столбец3 | столбец4 | столбец5 | процент_изменения |
|---|---|---|---|---|---|---|
| 1 | столбец3 | 10 | 9 | 5 | 4 | (10-9)/9*100 составляет 11,11% |
| 2 | столбец5 | 6 | 7 | 4 | 8 | (6-8)/8*100 равно -25% |
| 3 | столбец3 | 12 | 4 | 2 | 11 | (12-4)/4*100 равно 200% |
| 4 | столбец4 | 9 | 5 | 8 | 10 | (9-8)/8*100 составляет 12,5% |
Итак, для ID:1 col1 имеет значение col3. Таким образом, код должен найти этот col3 и вычислить процент значения под ним с помощью col2.
Точно так же для ID:2 col1 имеет значение col5, поэтому код должен найти col5 и найти процентное изменение с соответствующим значением в col2. То есть здесь столбец5 равен 8, а столбец2 равен 6. Затем вычислите процентное изменение.
Я попробовал несколько подходов, но получил неправильный результат.
Пожалуйста, помогите мне с кодом python pandas для того же.





Получите значения по уважать, а затем подсчитайте новый столбец с помощью арифметических операций:
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