我有两个表格如下所示
JaxWs
和
ID param1 param2 param3
0 A12 2 1 1
1 B15 1 2 1
2 B20 2 2 1
...
获取第一个数据帧的最佳方法是什么,在第二个数据帧中查找每个参数的权重并返回如下的数据帧?
parameter value weight
0 param1 1 10
1 param1 2 13
2 param2 1 21
3 param2 2 39
4 param3 1 49
5 param3 2 61
我在想的是在给定参数和值,子集table2的情况下编写函数,如下所示,
ID param1 param2 param3
0 A12 13 21 49
1 B15 10 39 49
2 B20 13 39 49
并对table1中的每一列执行某种矢量化应用程序,但我不知道如何查看每个值并进行查找。
答案 0 :(得分:5)
一种选择是将table1
转换为长格式,与table2
合并参数和值,然后将其转换回宽格式:
In [85]: pd.merge(pd.melt(df1, id_vars='ID'), df2,
left_on=['variable', 'value'], right_on=['parameter', 'value']
).pivot('ID', 'parameter', 'weight')
Out[85]:
parameter param1 param2 param3
ID
A12 13 21 49
B15 10 39 49
B20 13 39 49
答案 1 :(得分:2)
一堆吵架,我想出了一些远远低于@Psidom的东西。我只是说服自己发帖,以提供一些有关使用不同技术获得相同解决方案的见解。
In [55]: (df1.set_index('ID')
.rename_axis('parameter', 1)
.stack()
.reset_index(name='value')
.merge(df2)
.set_index(['ID', 'parameter']).weight.unstack())
Out[55]:
parameter param1 param2 param3
ID
A12 13 21 49
B15 10 39 49
B20 13 39 49