Tre*_*ney 4 python vlookup pandas pandas-groupby
jg Job Group
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
Run Code Online (Sandbox Code Playgroud)
ul UpperGroup LowerGroup Time
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
Run Code Online (Sandbox Code Playgroud)
vlookup'Job'数字jg是列和索引。
'Group'该值'Job'中的列数,应使用参考'UpperGroup'从ul'Group'该值'Job'中的索引号,应使用参考'LowerGroup'从ul'Time'来自ul对应于'UpperGroup'和'LowerGroup'。
'UpperGroup'= 116 和'LowerGroup'= 224,映射到'Time'= 15import pandas as pd
ul_data = {'UpperGroup': [116, 116, 116, 116, 124, 124, 124, 124, 74, 74, 74, 74, 126, 126, 126, 126],
'LowerGroup': [116, 124, 74, 126, 116, 124, 74, 126, 116, 124, 74, 126, 116, 124, 74, 126],
'Time': [5, 15, 15, 15, 15, 5, 15, 15, 15, 15, 5, 15, 15, 15, 15, 5]}
ul = pd.DataFrame(ul_data)
jg_data = {'Job': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13],
'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]}
jg = pd.DataFrame(jg_data)
Run Code Online (Sandbox Code Playgroud)
merge/joinmap这是获得所需结果的一种方法。
ul.set_index(['UpperGroup', 'LowerGroup'])['Time'].unstack().reindex(index=jg['Group'], columns=jg['Group'])
Run Code Online (Sandbox Code Playgroud)
输出:
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
Run Code Online (Sandbox Code Playgroud)
更进一步:
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)
Run Code Online (Sandbox Code Playgroud)
输出:
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
Run Code Online (Sandbox Code Playgroud)