You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Pandas DataFrame中按组将指定列的最大值减1

Pandas按组修改指定列最大值所在行的值

需求说明

按Name列分组,对指定列(A、B、D)分别找到组内最大值所在的单行,将该行对应列的值减1,C列保持原数值不变。

输入示例

Name A B C D
Bob  3 2 5 5
Bob  4 9 7 7 
Bob  6 0 1 3 
Jim  7 0 7 9 
Jim  1 3 9 1
Jim  2 7 1 5

实现代码

import pandas as pd

# 构造输入DataFrame
data = {
    'Name': ['Bob', 'Bob', 'Bob', 'Jim', 'Jim', 'Jim'],
    'A': [3, 4, 6, 7, 1, 2],
    'B': [2, 9, 0, 0, 3, 7],
    'C': [5, 7, 1, 7, 9, 1],
    'D': [5, 7, 3, 9, 1, 5]
}
df = pd.DataFrame(data)

# 指定需要处理的列
target_cols = ['A', 'B', 'D']

# 遍历每个目标列,修改对应组最大值所在行的数值
for col in target_cols:
    # 获取每组中该列最大值的行索引
    max_row_indices = df.groupby('Name')[col].idxmax()
    # 对这些行的目标列执行减1操作
    df.loc[max_row_indices, col] -= 1

# 输出结果
print(df)

输出结果

Name  A  B  C  D
0   Bob  3  2  5  5
1   Bob  4  8  7  6
2   Bob  5  0  1  3
3   Jim  6  0  7  8
4   Jim  1  3  9  1
5   Jim  2  6  1  5

代码说明

  • groupby('Name')[col].idxmax():按Name分组后,返回每个组内目标列最大值对应的行索引
  • df.loc[max_row_indices, col] -= 1:精准定位到最大值所在行,仅对目标列执行减1操作,不会改动C列及其他行的数值

内容的提问来源于stack exchange,提问作者Richard Dixon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 20:35:00