Контрольный столбец переменной плавки для расчета другого столбца в datafrane - PullRequest
0 голосов
/ 16 октября 2018

Используя python / pandas, я использовал функцию melt () для преобразования моих данных

Person  Score1  Score2  V1  V2
A   1   4   6   8
B   2   5   3   6
C   3   6   4   7

в форму

 Person variable  value  V1  V2
0      A   Score1      1   6  8
1      B   Score1      2   3  6
2      C   Score1      3   4  7
3      A   Score2      4   6  8
4      B   Score2      5   3  6
5      C   Score2      6   4  7

Теперь я хочу добавить еще один столбец V, где

V = V1, если переменная = Score1, иначе = V2, если переменная = Score2

, что приводит к:

  Person variable  value  V
0      A   Score1      1  6
1      B   Score1      2  3
2      C   Score1      3  4
3      A   Score2      4  8
4      B   Score2      5  6
5      C   Score2      6  7

Я попытался использовать имя_переменной для имениатрибут переменной, но он, кажется, действительно не определяет его, поэтому я изо всех сил пытаюсь использовать его для вычисления значений для столбца V, есть идеи?

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Использование wide_to_long:

df = (pd.wide_to_long(df.reset_index(),stubnames=['Score','V'], i=['index'], j='variable')
       .reset_index(level=0, drop=True)
       .reset_index()
       .assign(variable= lambda x: 'Score' + x['variable'].astype(str))
       )
print (df)
  variable Person  Score  V
0   Score1      A      1  6
1   Score1      B      2  3
2   Score1      C      3  4
3   Score2      A      4  8
4   Score2      B      5  6
5   Score2      C      6  7
0 голосов
/ 16 октября 2018

использование np.where

import numpy as np

df['v'] = np.where(df['variable']== 'Score1', df['V1'], df['V2'])

# if you want to drop the columns
# df.drop(['V1','V2], axis=1, inplace=True)
...