
使用 DataFrame.idxmax(axis=1) 可快速为每行返回最大值对应的列名,替代仅获取数值的 max(axis=1),适用于时间点、类别标签等场景。
使用 `dataframe.idxmax(axis=1)` 可快速为每行返回最大值对应的列名,替代仅获取数值的 `max(axis=1)`,适用于时间点、类别标签等场景。
在数据分析中,我们常需识别某指标达到峰值的“时间”或“条件”,而非仅关注峰值本身。例如,在销售数据中找出每日销量最高的日期列名(如 'Day 1'、'Day 2'),或在实验结果中定位表现最优的处理组。Pandas 提供了高效且语义清晰的方法:idxmax(axis=1)。
该方法沿行方向(axis=1)扫描指定列,对每行返回第一个出现的最大值所在列的标签(即列名),完美对应“When is the maximum?”这一需求。
以下为完整实现示例:
import pandas as pd
# 构建示例数据
data = {
'Car': ['Car1', 'Car2'],
'Day 1': [4, 8],
'Day 2': [7, 2],
'Day 4': [3, 1]
}
df = pd.DataFrame(data)
# 直接对目标列应用 idxmax(无需设索引亦可)
target_cols = ['Day 1', 'Day 2', 'Day 4']
df['When'] = df[target_cols].idxmax(axis=1)
print(df)输出:
Car Day 1 Day 2 Day 4 When 0 Car1 4 7 3 Day 2 1 Car2 8 2 1 Day 1
✅ 关键说明:
-
idxmax()默认返回首个最大值的列名(若存在并列最大值,仅取最左列); - 若需处理并列情况(如返回所有列名列表),可结合
apply()与布尔索引实现; - 列名需为字符串类型,且目标列应为数值型(否则会报错或产生意外结果);
- 若原始 DataFrame 含非数值列(如
'Car'),务必显式指定target_cols,避免类型冲突。
? 进阶提示:若需同时获取最大值与对应列名,可使用 agg 或 apply 返回元组:
df[['Max_Value', 'When']] = df[target_cols].agg(['max', 'idxmax'], axis=1)
掌握 idxmax(axis=1) 是 Pandas 行级分析的关键技能之一——它让“定位峰值发生位置”变得简洁、可读且高效。

















