有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
中提取相应值的最佳选择是什么?
答案 0 :(得分:1)
您的主要问题是匹配df1
和df2
之间的列。让我们适当地重命名它们,融合两个数据框,合并并提取:
(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