Pandas 使用由原始数据框中的行值定义的行/列名从查找表创建新列

Pandas 使用由原始数据框中的行值定义的行/列名从查找表创建新列,pandas,lookup-tables,Pandas,Lookup Tables,我有一个数据框架(df_表),有两列,“University”和“Major” University Major 0 UnivA Business 1 UnivA Computer 2 UnivC Computer 3 UnivB Architecture 我还有一个查找表(df_lu),其中行值对应于“University”和列标题 对应于专业,表格条目对应于预期工资: University Business Computer Arc

我有一个数据框架(df_表),有两列,“University”和“Major”

    University  Major
0   UnivA   Business
1   UnivA   Computer
2   UnivC   Computer
3   UnivB   Architecture
我还有一个查找表(df_lu),其中行值对应于“University”和列标题 对应于专业,表格条目对应于预期工资:

    University  Business    Computer Architecture
0   UnivA      100          200       300
1   UnivB      150          250       350
2   UnivC      95           86        14
3   UnivD      32           0         27
我想在第一个表中创建一个新列“Expected_Salary” 使用基于lokup表中的行/列vlaues的条目:

    University  Major   Expected_Salary
0   UnivA   Business    100
1   UnivA   Computer    200
2   UnivC   Computer    86
3   UnivB   Architecture    350
我试过这样的方法:

df_table['Salary_Expected'] = df_table['University'].map(df_lu.set_index(
    'University')[col for col in df_lu.column if col==df_table.Major ]
但我似乎无法从查找表中正确指定列

另一次尝试:

df_table['Salary_Expected'] =  df_lu.lookup(df_lu.index.
                                            where(df_lu.University==df_table.University,
同样,在df_lu中指定列名似乎不起作用。
我希望有一个简单的解决方案,否则我可以只做一个嵌套循环

如果有代码来生成您直接使用的数据帧就好了;但是,我认为您应该尝试将数据堆叠在第二个数据帧中:
df2=df2.stack()
然后您可以重命名索引级别
major
,然后将其作为具有适当索引的查找表。您甚至不需要使用原始的df。使用查找表只需执行
df.melt(id\u vars='University')
,您就可以得到所需的内容。