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
考虑玩具数据帧 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