如何编写pandas的apply lambda函数实现值与外部列表同索引值对比
解决方案
你之前代码的核心问题是:对df['column1']单列Series调用apply时,传入自定义函数的参数是单个单元格的数值,不是行对象,不存在index属性,自然无法定位外部列表的对应位置。
以下是几种可直接运行的实现方案,按优先级从高到低排序:
方法1:矢量化操作(最高效,推荐)
直接用numpy.where完成逐元素比较,不需要循环,性能远高于apply方案:
import pandas as pd import numpy as np df = pd.DataFrame({'column1':[1,2,3,4,5]}) list_of_nums = [0,3,2,5,6] # 等长的Series和列表可以直接逐元素比较 df['column2'] = np.where(df['column1'] > list_of_nums, 'Greater', 'Less')
运行后df['column2']的输出和预期完全一致。
方法2:列表推导式(简单直观)
如果数据量不大,用zip同时遍历列和列表,写法更易读:
df['column2'] = ['Greater' if a > b else 'Less' for a, b in zip(df['column1'], list_of_nums)]
方法3:适配你的apply写法
如果你确实需要用apply实现,要对整行做遍历,通过row.name获取当前行的索引:
def compare_to_list(row): if row['column1'] > list_of_nums[row.name]: return 'Greater' else: return 'Less' df['column2'] = df.apply(compare_to_list, axis=1)
内容的提问来源于stack exchange,提问作者AI92
相关产品推荐
相关产品推荐

