Вход

      DBN Grade   3   4   5
0  01M015     3  30  44  15
1  01M015     4  30  44  15
2  01M015     5  30  44  15

Пожеланная выходная мощность

      DBN Grade   3   4   5  Enrollment
0  01M015     3  30  44  15  30
1  01M015     4  30  44  15  44
2  01M015     5  30  44  15  15

Как бы вы создали столбец регистрации?

Обратите внимание, что столбец, который мы ищем для каждой записи, зависит от значения в df ['Grade'].

Я пробовал варианты df [df ['Grade']], чтобы я мог найти столбец df ['3'], но у меня ничего не получилось.

Есть ли способ сделать это просто?

import pandas as pd
import numpy as np

data={'DBN':['01M015','01M015','01M015'],
      'Grade':['3','4','5'],
      '3':['30','30','30'],
      '4':['44','44','44'],
      '5':['15','15','15']}

df = pd.DataFrame(data)

# This line below doesn't work: raises ValueError: Length of values does not match length of index
df['Enrollment'] = [df[c] if (df.loc[i,'Grade'] == c) else None for i in df.index for c
                    in df.columns]

2
Christina Zhou 7 Фев 2020 в 20:14

2 ответа

Лучший ответ

Установите свой индекс, а затем используйте lookup:

df.set_index('Grade').lookup(df['Grade'], df['Grade'])
array(['30', '44', '15'], dtype=object)

Вы можете столкнуться с некоторыми проблемами, если ваши данные являются числовыми (в ваших примерах данных это все строки), что требует приведения для успешного поиска.

4
user3483203 7 Фев 2020 в 17:22
import pandas as pd
import numpy as np

data={'DBN':['01M015','01M015','01M015'],
      'Grade':['3','4','5'],
      '3':['30','30','30'],
      '4':['44','44','44'],
      '5':['15','15','15']}

df = pd.DataFrame(data)
enrollmentList = []

for index, row in df.iterrows():
    enrollmentList.append(row[row["Grade"]])


df['Enrollment'] =  enrollmentList
1
Michel Guimarães 7 Фев 2020 в 17:23