如何在Pandas中基于condition列从team/team2生成Required_Col?
解决Pandas中根据条件选择列值的最优方法
嘿,这个需求用Pandas的向量化操作就能高效搞定,完全不用写低效的逐行循环,下面给你两种简洁且性能拉满的方法,其中第一种是最推荐的:
首先先还原你的数据集方便测试:
import pandas as pd data = { 'team': ['Australia']*6, 'team2': ['Sri Lanka']*6, 'condition': ['Sri Lanka']*3 + ['Australia']*3 } df = pd.DataFrame(data)
方法一:用numpy.where实现向量化判断
这是性能最优的方案,因为numpy.where是底层向量化实现,处理大数据集时比逐行操作快很多:
import numpy as np df['Required_Col'] = np.where(df['team'] == df['condition'], df['team2'], df['team'])
逻辑很直白:如果team的值和condition相等,那就取team2的值(因为它肯定不等于condition);反之就取team的值,完美匹配你的规则。
方法二:用Pandas的mask方法
这是另一种向量化实现,逻辑和上面完全一致,写法更偏向Pandas原生风格:
df['Required_Col'] = df['team'].mask(df['team'] == df['condition'], df['team2'])
mask函数的作用是:当第一个参数的条件为真时,用第二个参数的值替换原列的值,刚好对应我们的需求——当team等于condition时,替换成team2,否则保留team的值。
为什么这两种方法是最优的?
Pandas的核心优势就是向量化操作,这两种方法都避免了apply(axis=1)或者for循环这类逐行处理的方式。当你的数据集行数成千上万时,向量化操作的性能会比逐行操作快几个数量级,这也是官方推荐的最佳实践。
运行完上面的代码后,你的DataFrame就会生成符合要求的Required_Col列,和你给出的预期结果完全一致。
内容的提问来源于stack exchange,提问作者muazfaiz
相关产品推荐
相关产品推荐

