Python Dataframe:获取最大元素的索引
我正在寻找一种方法来获取数据帧中最大元素的索引和列。到目前为止,这是我的代码:Python Dataframe:获取最大元素的索引,python,indexing,pandas,dataframe,Python,Indexing,Pandas,Dataframe,我正在寻找一种方法来获取数据帧中最大元素的索引和列。到目前为止,这是我的代码: idx = range(0, 50, 5) col = range(0, 50, 5) scores = pd.DataFrame(np.zeros((len(idx), len(col))), index=idx, columns=col, dtype=float) scores.loc[11, 16] = 5 #Assign a random element 这为我提供了以下数据帧: | 1 6 1
idx = range(0, 50, 5)
col = range(0, 50, 5)
scores = pd.DataFrame(np.zeros((len(idx), len(col))), index=idx, columns=col, dtype=float)
scores.loc[11, 16] = 5 #Assign a random element
这为我提供了以下数据帧:
| 1 6 11 16 21 26 31 36 41 46
------------------------------------------
1 | 0 0 0 0 0 0 0 0 0 0
6 | 0 0 0 0 0 0 0 0 0 0
11| 0 0 0 5 0 0 0 0 0 0
16| 0 0 0 0 0 0 0 0 0 0
21| 0 0 0 0 0 0 0 0 0 0
26| 0 0 0 0 0 0 0 0 0 0
31| 0 0 0 0 0 0 0 0 0 0
36| 0 0 0 0 0 0 0 0 0 0
41| 0 0 0 0 0 0 0 0 0 0
46| 0 0 0 0 0 0 0 0 0 0
之后,我使用取消堆栈方法:
unstacked = scores.unstack().copy()
unstacked.sort(ascending=False)
这给了我:
16 11 5
46 46 0
16 31 0
11 31 0
36 0
...
如何获取最大值的索引和列?我想得到一些类似于数组或元组的东西,这些数组或元组包含(16,11)
您正在寻找的idxmax
:
In [1332]: x
Out[1332]:
1 6 11 16 21 26 31 36 41 46
0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0
2 0 0 5 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0
5 0 0 0 0 0 0 0 0 0 0
6 0 0 0 0 0 0 0 0 0 0
7 0 0 0 0 0 0 0 0 0 0
8 0 0 0 0 0 0 0 0 0 0
9 0 0 0 0 0 0 0 0 0 0
最大值的行:
In [1337]: max(x.idxmax())
Out[1337]: 2
最大值列(太多max
s):
这可以用来获取列,但是max(x.idxmax())
只返回索引本身的数值最大值,而不是表中最大值的索引(在本例中很幸运,因为其他所有内容都是0)。另一种选择是:
s = x.max()[x.max() == x.max(index=1).max()].index
s = str(s[0])
max_index = x.idxmax()[s]
可能重复-这正是我想要的,但我有点惊讶没有一个更有效的答案。。。就像让idxmax在列大小写中返回一个数字一样。当您只需要整数时,您可能会存储数百万个字符串,我不明白为什么有人希望这成为默认行为@_@是的,我同意。我在时间紧迫的情况下编写了这段代码,并没有深入研究这个问题,但我搜索了很多,什么也没找到。idxmax()也很适合处理这种情况。
x.max()[x.max() == x.max(axis=1).max()].index
s = x.max()[x.max() == x.max(index=1).max()].index
s = str(s[0])
max_index = x.idxmax()[s]