Python 如何使用pandas实现vlookup风格的交叉引用 给定以下数据帧 jg 作业组 1 116.0 2 116.0 3 116.0 4 116.0 5 116.0 6 116.0 7 124.0 8 124.0 9 74.0 10 74.0 11 74.0 12 126.0 13 126.0 ul 上分组下分组时间 116 116 5 116 124 15 116 74 15 116 126 15 124 116 15 124 124 5 124 74 15 124 126 15 74 116 15 74 124 15 74 74 5 74 126 15 126 116 15 126 124 15 126 74 15 126 126 5 期望结果 下表使用Excelvlookup 颜色仅供参考 数据框结果中不需要灰色填充区域 我正在尝试创建一个数据框/表,其中'Job'来自jg的编号是列和索引。 列中'Job'编号的'Group'值应用于从ul 索引中'Job'编号的'Group'值应用于引用'LowerGroup'中的'ul 这些值是来自ul的'Time',对应于'UpperGroup'和'LowerGroup'。 'UpperGroup'=116和'LowerGroup'=224,映射到'Time'=15
可复制数据帧Python 如何使用pandas实现vlookup风格的交叉引用 给定以下数据帧 jg 作业组 1 116.0 2 116.0 3 116.0 4 116.0 5 116.0 6 116.0 7 124.0 8 124.0 9 74.0 10 74.0 11 74.0 12 126.0 13 126.0 ul 上分组下分组时间 116 116 5 116 124 15 116 74 15 116 126 15 124 116 15 124 124 5 124 74 15 124 126 15 74 116 15 74 124 15 74 74 5 74 126 15 126 116 15 126 124 15 126 74 15 126 126 5 期望结果 下表使用Excelvlookup 颜色仅供参考 数据框结果中不需要灰色填充区域 我正在尝试创建一个数据框/表,其中'Job'来自jg的编号是列和索引。 列中'Job'编号的'Group'值应用于从ul 索引中'Job'编号的'Group'值应用于引用'LowerGroup'中的'ul 这些值是来自ul的'Time',对应于'UpperGroup'和'LowerGroup'。 'UpperGroup'=116和'LowerGroup'=224,映射到'Time'=15,python,pandas,pandas-groupby,vlookup,Python,Pandas,Pandas Groupby,Vlookup,可复制数据帧 将熊猫作为pd导入 ul_data={'UpperGroup':[116,116,116,124,124,124,124,74,74,74,74,126,126,126,126,126,126], ‘LowerGroup’:[116、124、74、126、116、124、74、126、116、124、74、126、116、124、74、126、116、124、74、126], “时间”:[5,15,15,15,15,5,15,15,15,15,15,15,5,15,15,15,15
将熊猫作为pd导入
ul_data={'UpperGroup':[116,116,116,124,124,124,124,74,74,74,74,126,126,126,126,126,126],
‘LowerGroup’:[116、124、74、126、116、124、74、126、116、124、74、126、116、124、74、126、116、124、74、126],
“时间”:[5,15,15,15,15,5,15,15,15,15,15,15,5,15,15,15,15,15]}
ul=pd.数据帧(ul_数据)
jg_data={'Job':[1,2,3,4,5,6,7,8,9,10,11,12,13],
“组”:[116.0、116.0、116.0、116.0、116.0、116.0、124.0、124.0、74.0、74.0、126.0、126.0]}
jg=pd.数据帧(jg_数据)
研究
- 我已经回顾了搜索中的几个问题,但它们似乎并不太合适,我只是想不出一种方法来把它们全部结合起来。
- 已考虑合并/加入
- 已考虑
map
- 这里有一种方法可以获得想要的结果
ul.set_index(['UpperGroup', 'LowerGroup'])['Time'].unstack().reindex(index=jg['Group'], columns=jg['Group'])
输出:
Group 116.0 116.0 116.0 116.0 116.0 116.0 124.0 124.0 74.0 74.0 74.0 126.0 126.0
Group
116.0 5 5 5 5 5 5 15 15 15 15 15 15 15
116.0 5 5 5 5 5 5 15 15 15 15 15 15 15
116.0 5 5 5 5 5 5 15 15 15 15 15 15 15
116.0 5 5 5 5 5 5 15 15 15 15 15 15 15
116.0 5 5 5 5 5 5 15 15 15 15 15 15 15
116.0 5 5 5 5 5 5 15 15 15 15 15 15 15
124.0 15 15 15 15 15 15 5 5 15 15 15 15 15
124.0 15 15 15 15 15 15 5 5 15 15 15 15 15
74.0 15 15 15 15 15 15 15 15 5 5 5 15 15
74.0 15 15 15 15 15 15 15 15 5 5 5 15 15
74.0 15 15 15 15 15 15 15 15 5 5 5 15 15
126.0 15 15 15 15 15 15 15 15 15 15 15 5 5
126.0 15 15 15 15 15 15 15 15 15 15 15 5 5
Group 116.0 124.0 74.0 126.0
Job 1 2 3 4 5 6 7 8 9 10 11 12 13
Group Job
116.0 1 5 5 5 5 5 5 15 15 15 15 15 15 15
2 5 5 5 5 5 5 15 15 15 15 15 15 15
3 5 5 5 5 5 5 15 15 15 15 15 15 15
4 5 5 5 5 5 5 15 15 15 15 15 15 15
5 5 5 5 5 5 5 15 15 15 15 15 15 15
6 5 5 5 5 5 5 15 15 15 15 15 15 15
124.0 7 15 15 15 15 15 15 5 5 15 15 15 15 15
8 15 15 15 15 15 15 5 5 15 15 15 15 15
74.0 9 15 15 15 15 15 15 15 15 5 5 5 15 15
10 15 15 15 15 15 15 15 15 5 5 5 15 15
11 15 15 15 15 15 15 15 15 5 5 5 15 15
126.0 12 15 15 15 15 15 15 15 15 15 15 15 5 5
13 15 15 15 15 15 15 15 15 15 15 15 5 5
进一步说:
ul.set_index(['UpperGroup', 'LowerGroup'])['Time']\
.unstack()\
.reindex(index=jg['Group'], columns=jg['Group'])\
.set_axis(pd.MultiIndex.from_frame(jg[['Group', 'Job']]))\
.set_axis(pd.MultiIndex.from_frame(jg[['Group', 'Job']]), axis=1)
输出:
Group 116.0 116.0 116.0 116.0 116.0 116.0 124.0 124.0 74.0 74.0 74.0 126.0 126.0
Group
116.0 5 5 5 5 5 5 15 15 15 15 15 15 15
116.0 5 5 5 5 5 5 15 15 15 15 15 15 15
116.0 5 5 5 5 5 5 15 15 15 15 15 15 15
116.0 5 5 5 5 5 5 15 15 15 15 15 15 15
116.0 5 5 5 5 5 5 15 15 15 15 15 15 15
116.0 5 5 5 5 5 5 15 15 15 15 15 15 15
124.0 15 15 15 15 15 15 5 5 15 15 15 15 15
124.0 15 15 15 15 15 15 5 5 15 15 15 15 15
74.0 15 15 15 15 15 15 15 15 5 5 5 15 15
74.0 15 15 15 15 15 15 15 15 5 5 5 15 15
74.0 15 15 15 15 15 15 15 15 5 5 5 15 15
126.0 15 15 15 15 15 15 15 15 15 15 15 5 5
126.0 15 15 15 15 15 15 15 15 15 15 15 5 5
Group 116.0 124.0 74.0 126.0
Job 1 2 3 4 5 6 7 8 9 10 11 12 13
Group Job
116.0 1 5 5 5 5 5 5 15 15 15 15 15 15 15
2 5 5 5 5 5 5 15 15 15 15 15 15 15
3 5 5 5 5 5 5 15 15 15 15 15 15 15
4 5 5 5 5 5 5 15 15 15 15 15 15 15
5 5 5 5 5 5 5 15 15 15 15 15 15 15
6 5 5 5 5 5 5 15 15 15 15 15 15 15
124.0 7 15 15 15 15 15 15 5 5 15 15 15 15 15
8 15 15 15 15 15 15 5 5 15 15 15 15 15
74.0 9 15 15 15 15 15 15 15 15 5 5 5 15 15
10 15 15 15 15 15 15 15 15 5 5 5 15 15
11 15 15 15 15 15 15 15 15 5 5 5 15 15
126.0 12 15 15 15 15 15 15 15 15 15 15 15 5 5
13 15 15 15 15 15 15 15 15 15 15 15 5 5