我有两个大小相同的数据框。
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
非常感谢您!
答案 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()))
该解决方案的一个好功能是避免循环,从而提高了效率。