2016-10-26 18 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 
相關問題