从另一个df引用中提取相应的df值

时间:2020-11-03 13:30:20

标签: python pandas

有2个数据框,它们之间具有1到1的对应关系。我可以从idxmax中的所有列中检索df1

输入:

df1 = pd.DataFrame({'ref':[2,4,6,8,10,12,14],'value1':[76,23,43,34,0,78,34],'value2':[1,45,8,0,76,45,56]})
df2 = pd.DataFrame({'ref':[2,4,6,8,10,12,14],'value1_pair':[0,0,0,0,180,180,90],'value2_pair':[0,0,0,0,90,180,90]})

df=df1.loc[df1.iloc[:,1:].idxmax(), 'ref']

输出:df1,df2和df

     ref  value1  value2
0    2      76       1
1    4      23      45
2    6      43       8
3    8      34       0
4   10       0      76
5   12      78      45
6   14      34      56  

     ref  value1_pair  value2_pair
0    2            0            0
1    4            0            0
2    6            0            0
3    8            0            0
4   10          180           90
5   12          180          180
6   14           90           90

    5    12
    4    10
Name: ref, dtype: int64

现在我要创建一个包含3列的df

所需的输出df

ref   max value   corresponding value
12    78          180
10    76          90

df2中提取相应值的最佳选择是什么?

1 个答案:

答案 0 :(得分:1)

您的主要问题是匹配df1df2之间的列。让我们适当地重命名它们,融合两个数据框,合并并提取:

(df1.melt('ref')
    .merge(df2.rename(columns={'value1_pair':'value1', 
                               'value2_pair':'value2'})
              .melt('ref'), 
           on=['ref', 'variable'])
    .sort_values('value_x')
    .groupby('variable').last()
)

输出:

          ref  value_x  value_y
variable                       
value1     12       78      180
value2     10       76       90