Python如何计算pandas DataFrame每行关键字对应的最大值
问题原因
你遇到的报错是因为df['Positive Dispatch']是单列的Series对象,仅存在一维索引,axis=1是DataFrame按行计算的参数,不适用于Series;同时该列存储的是字符串格式的关键字组合,直接求最大值也无法得到你需要的数值计算结果。
解决方法
- 首先将关键字与固定数值的对应关系存为字典,后续新增关键字只需要更新该字典即可,无需修改其他逻辑。
- 对
Positive Dispatch列逐行处理:先按逗号拆分得到当前行的所有关键字,查询字典获取每个关键字对应的数值,再取最大值存入新列。
如果你的原DataFrame中已经存在a、b、c等关键字对应的数值列(0代表当前行不存在该关键字),也可以直接对这些数值列按行取最大值,效率更高。
完整可运行代码
import pandas as pd # 关键字与固定数值的映射字典,新增关键字直接在这里添加即可 value_map = {'a':12, 'b':22, 'c':11} # 构造测试数据 dic1 = { 'a': [12,0,12], 'b': [0,22,22], 'c': [11,0,0], } df = pd.DataFrame(dic1) # 生成Positive Dispatch列 df['Positive Dispatch'] = df.gt(0).dot(df.columns + ',').str[:-1] # 方法1:通过处理Positive Dispatch字符串计算最大值,适配所有场景 df['Max'] = df['Positive Dispatch'].apply(lambda x: max(value_map[k] for k in x.split(','))) # 方法2:直接通过数值列计算最大值,效率更高(要求数值列的值和value_map完全对应,0代表无该关键字) # df['Max'] = df[value_map.keys()].max(axis=1) # 只保留需要的两列输出 print(df[['Positive Dispatch', 'Max']])
输出结果
Positive Dispatch Max 0 a,c 12 1 b 22 2 a,b 22
内容的提问来源于stack exchange,提问作者Vesper
相关产品推荐
相关产品推荐

