python pandas: 计算矩阵子集中列的argmax

python pandas: computing argmax of column in matrix subset

考虑玩具数据帧 df1 和 df2,其中 df2 是 df1 的子集(不包括第一行)。

导入 pandas 作为 pd 将 numpy 导入为 np

df1 = pd.DataFrame({'colA':[3.0,9,45,7],'colB':['A','B','C','D']})
df2 = df1[1:]

现在让我们为每一帧找到 colA 的 argmax

np.argmax(df1.colA) ## result is "2", which is what I expected
np.argmax(df2.colA) ## result is still "2", which is not what I expected.  I expected "1" 

如果我的兴趣矩阵是 df2,我该如何解决这个索引问题?这个怪癖与 pandas、numpy 或只是 python 内存有关吗?

我认为这是由于索引。您可以在分配 df2:

时使用 reset_index
df1 = pd.DataFrame({'colA':[3.0,9,45,7],'colB':['A','B','C','D']})
df2 = df1[1:].reset_index(drop=True)

In [464]: np.argmax(df1.colA)
Out[464]: 2

In [465]: np.argmax(df2.colA)
Out[465]: 1

我认为最好使用方法 argmax 而不是 np.argmax:

In [467]: df2.colA.argmax()
Out[467]: 1

您需要重置 df2 的索引:

df2.reset_index(inplace=True, drop=True)
np.argmax(df2.colA)
>> 1