2016-10-26 21 views
5

我有一个类似如下使用列标题和值从一个数据帧寻找权重另一个数据帧

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 

什么是最好的方式采取的第一个数据帧的两个表,在第二个数据框中查找每个参数的权重并返回如下的数据框?

ID param1 param2 param3 
0 A12  13  21  49 
1 B15  10  39  49 
2 B20  13  39  49 

我在想什么是写像下面给出的参数的函数,和值,子表2, table2[(table2['parameter'] = parameter) & (table2['value'] = value)]并做某种类型的量化应用到每一列于表1,但是我不知道如何查看每个值并执行查找。

回答

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 
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 
相关问题