在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
相关产品推荐
相关产品推荐

