嵌套if逻辑未返回预期结果:Pandas DataFrame颜色映射函数问题
问题:Pandas函数嵌套if逻辑错误导致颜色标记不符合预期
你的代码里,my_func的嵌套if判断存在逻辑矛盾,导致永远无法返回black。当外层判断A == "a" and C ==0成立时,内层又判断A == 'm' and C ==1——同一个A不可能同时是"a"和"m",C也不可能同时是0和1,这两个条件完全互斥,所以这个分支永远不会触发。
修正后的代码
把返回black的条件拆成独立的判断分支,同时修正groupby.apply的使用方式(原方式会传入Series而非单个值):
import pandas as pd df = pd.DataFrame({'date':['date1', 'date1', 'date1', 'date2','date2', 'date2', 'date3', 'date3', 'date3' ], 'A': ['m', 'm', 'a', 'm', 'a', 'e', 'm', 'a', 'e'], 'B':['p', 'p', 0, 'p', 'q', 'r', 'p', 'q', 'r'], 'C':[1,1,0,0,1,0, 0, 0, 1]}) def my_func(A, C): if A == "a" and C == 0: return 'black' elif A == 'a' and C == 1: return 'green' elif A == "m" and C == 0: return "red" # 未匹配条件时默认返回None # 逐行传入单个值处理 result = df.apply(lambda row: my_func(row['A'], row['C']), axis=1) print(result)
输出结果
0 None 1 None 2 black 3 red 4 green 5 None 6 red 7 None 8 None
更高效的向量化实现(推荐)
如果处理大数据集,用np.select实现向量化操作比逐行循环效率更高:
import numpy as np conditions = [ (df['A'] == 'a') & (df['C'] == 0), (df['A'] == 'a') & (df['C'] == 1), (df['A'] == 'm') & (df['C'] == 0) ] choices = ['black', 'green', 'red'] df['color'] = np.select(conditions, choices, default=None) print(df['color'])
输出结果和预期完全一致。
内容的提问来源于stack exchange,提问作者ferrelwill
相关产品推荐
相关产品推荐

