如何根据值在另一个数据框中的位置获取一个数据框上的值

时间:2019-03-23 02:24:22

标签: python pandas dataframe

我有两个大小相同的数据框。

df1
1 5 3
6 5 1
2 4 9

df2
a b c
d e f
g h i

我想在df2上获得与df1中每一行的最大值位于同一位置的相应值。例如,第0行的元素[0,1]为最大值,因此我想从df2获取[0,1]

期望的结果将是:

df3
b
d
i

非常感谢您!

4 个答案:

答案 0 :(得分:1)

S=df1.idxmax(axis=0)
p=0
for a in range(len(df1):

     df3.iloc(['a','0'])=df2.iloc([S[p],0])
     p+=1

尝试输入代码:

答案 1 :(得分:1)

>>> for i, j in enumerate(df1.idxmax()):
...     print(df2.iloc[i, j])
... 
b
d
i

idxmax给出数据帧中按行或按列的最大值的ID。

答案 2 :(得分:1)

不要用于循环。 numpy在这里可以方便

vals = df2.values[np.arange(len(df2)), df1.values.argmax(1)]

当然可以df3 = pd.DataFrame(vals)

    col
0   b
1   d
2   i

答案 3 :(得分:1)

您的问题分为两个部分:
1-查找每行的最大值
2-使用在第一步中找到的值选择每行的最大列

您可以轻松使用lookup功能。第一个参数是查找行中的最大列(步骤1),第二个参数是选择(步骤2)

df2.lookup(range(len(df1)), df1.idxmax()) #output => array(['b', 'd', 'i'], dtype=object)

如果数组不适合您,还可以通过将这些值简单地传递给pd.DataFrame来从这些值创建数据框:

pd.DataFrame(df2.lookup(range(len(df1)), df1.idxmax()))

该解决方案的一个好功能是避免循环,从而提高了效率。