Pandas 使用由原始数据框中的行值定义的行/列名从查找表创建新列
我有一个数据框架(df_表),有两列,“University”和“Major”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
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')
,您就可以得到所需的内容。