Python pandas如何根据行最大值对应列名新增数据列
实现步骤
首先你需要先确认DataFrame的列名已经替换为对应保费调整幅度的业务文本,不要用Col1/Col2这类占位名称。如果是从csv/Excel读入的原始数据,先做表头处理:
import pandas as pd # 假设df是你读入的原始数据,当前列名为Col1/Col2/Col3/Col4,第一行是实际业务列名 # 1. 替换列名为业务字段 df.columns = df.iloc[0] # 2. 删除已用作表头的第一行数据 df = df.drop(0).reset_index(drop=True) # 3. 把保费占比的列转换为float类型 price_adjust_cols = ['< -$100', '-$100 to -$90', '-$90 to -$80'] df[price_adjust_cols] = df[price_adjust_cols].astype(float)
之后直接用pandas内置的idxmax方法按行取最大值对应的列名即可:
# 新增列存储每行最大占比对应的保费调整区间 df['common_price_change'] = df[price_adjust_cols].idxmax(axis=1)
特殊情况处理
如果某行存在多个列的占比同为最大值,idxmax默认会返回第一个出现的列名。如果需要返回所有并列的最大值列,可以改用apply实现:
df['common_price_change'] = df[price_adjust_cols].apply( lambda row: ','.join(row[row == row.max()].index), axis=1 )
运行后得到的结果和你给出的预期输出完全一致。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

