【发布时间】:2022-07-25 21:54:05
【问题描述】:
我不仅要查找数据框行中的最大值,还要查找具有该值的特定列。如果有多个列的值,那么要么返回所有列的列表,要么只返回一个,都可以。
在这种情况下,我特别关心为单个给定行执行此操作,但如果有可以应用于数据框的解决方案,那也很好。
以下是我的意思的粗略概念。 row.max() 返回最大值,但我想要的函数 row.max_col() 返回具有最大值的列的名称。
>>> import pandas as pd
>>> df = pd.DataFrame({"A": [1,2,3], "B": [4,5,6]})
>>> row = df.iloc[0]
>>> row.max()
4
>>> row.max_col()
Index(['B'], dtype='object')
我目前的做法是这样的:
>>> row.index[row.eq(row.max())]
Index(['B'], dtype='object')
我不熟悉 pandas 如何优化所有内容,因此如果我在这里错了,我深表歉意,但我假设 row.index[row.eq(...)] 的线性时间增长与列数成正比。我正在处理少量列,所以这应该不是一个大问题,但我很好奇是否有一种方法可以像使用 .max() 而无需这样做之后的额外工作是寻找相等的值。
【问题讨论】:
-
有一个函数可以做到这一点,
idxmax()。您可以按行或按列应用它。 -
你想要 max 和 idxmax 吗?
df.agg(['max', 'idxmax'], axis=1)之类的东西? -
@sophocles 和 @henry-ecker -
idxmax正是我想要的,非常感谢