使用一个数据帧中的列标题和值来查找另一个数据帧中的权重

时间:2016-10-26 21:06:30

标签: python pandas dataframe

我有两个表格如下所示

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中的每一列执行某种矢量化应用程序,但我不知道如何查看每个值并进行查找。

2 个答案:

答案 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