Python 拿一个单元格';s值以指示列中的列名

Python 拿一个单元格';s值以指示列中的列名,python,pandas,Python,Pandas,输入 期望输出 DBN Grade 3 4 5 0 01M015 3 30 44 15 1 01M015 4 30 44 15 2 01M015 5 30 44 15 您将如何创建“注册”列 请注意,我们为每条记录寻找的列取决于df['Grade']处的值 我尝试了df[df['Grade']],以便找到df['3']列,但没有成功 有没有简单的方法可以做到这一点 DBN Grade 3 4 5

输入

期望输出

      DBN Grade   3   4   5
0  01M015     3  30  44  15
1  01M015     4  30  44  15
2  01M015     5  30  44  15
您将如何创建“注册”列

请注意,我们为每条记录寻找的列取决于df['Grade']处的值

我尝试了df[df['Grade']],以便找到df['3']列,但没有成功

有没有简单的方法可以做到这一点

      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

设置索引,然后使用
查找

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]


如果数据是数字的(在示例数据中都是字符串),则可能会遇到一些问题,需要强制转换才能使查找成功

array(['30', '44', '15'], dtype=object)
array(['30', '44', '15'], dtype=object)
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