Pandas DataFrame列添加:lambda函数适用场景及代码错误排查
Pandas DataFrame加列:lambda函数该用不该用?附代码纠错
一、该用lambda的场景
- 要对单行数据做简单自定义逻辑,而且这个逻辑没法用Pandas自带的矢量化操作直接实现的时候,比如结合多列做条件判断:
df['discount'] = df.apply(lambda row: row['price']*0.8 if row['quantity']>10 else row['price'], axis=1) - 临时的简单单行转换,犯不着单独写个函数,用lambda更省事。
二、不该用lambda的场景
- 能用Pandas矢量化方法搞定的,千万别用lambda+apply,矢量化比逐行apply快太多了,比如列直接加减、内置的字符串/数值处理(像
df['col1']+df['col2']、df['col'].str.upper()这种)。 - 逻辑复杂、要写好几行代码的,单独定义个命名函数比lambda好读好维护。
- 需要重复用的逻辑,单独写函数才方便复用,lambda没法重复调用。
三、你的代码问题排查
你给的这段代码:
v_to_c['time'] = v_to_c.apply(lambda row: v_to_c.checkout_time - v_to_c.visit_time,axis=1)
有俩明显问题:
- 逻辑错了还冗余:lambda里直接拿整个DataFrame的列做运算,不是针对当前的
row,结果就是每一行都会返回全列的差值,最后time列会是重复的Series,完全没必要用apply。 - 性能拉胯:本来一行矢量化操作就能搞定的事,非得用逐行apply,纯纯浪费性能。
修正后直接用矢量化运算就行,根本不需要lambda和apply:
v_to_c['time'] = v_to_c['checkout_time'] - v_to_c['visit_time']
内容的提问来源于stack exchange,提问作者balabiad9
相关产品推荐
相关产品推荐

