如何解决Pandas中使用apply函数时出现的KeyError: 'Value'问题
解决KeyError及逻辑问题的方案
错误原因
你遇到的KeyError: 'Value',核心是df.apply(adjust_rank)默认按列处理数据(axis=0),此时函数里的s是单列的Series,自然找不到'Value'这个索引。另外你的代码还有两个隐性问题:
- 用了位运算符
&代替逻辑运算符and,会导致优先级错误的逻辑判断 - 函数没有返回值,最终
df['Rank']会全是NaN
修正后的逐行处理代码
def adjust_rank(s): # 用and做逻辑判断,也可以用括号包裹条件后用&(注意运算符优先级) if s['Value'] == 0 and s['Measure'] == "Count": if s["Gender"] == "boy": return 5000 # 男生最低排名 elif s["Gender"] == "girl": return 3459 # 女生最低排名 else: return s['Value'] else: # 其余情况保留原Value作为Rank return s['Value'] # 指定axis=1,按行处理每一条记录 df['Rank'] = df.apply(adjust_rank, axis=1)
更高效的Pandas向量化写法(推荐)
用向量化操作替代apply,速度更快,适合大数据量场景:
import numpy as np # 先设置默认Rank为原Value df['Rank'] = df['Value'] # 筛选符合条件的记录并替换Rank值 mask = (df['Value'] == 0) & (df['Measure'] == "Count") df.loc[mask & (df['Gender'] == 'boy'), 'Rank'] = 5000 df.loc[mask & (df['Gender'] == 'girl'), 'Rank'] = 3459
内容的提问来源于stack exchange,提问作者elksie5000
相关产品推荐
相关产品推荐

