Python Pandas:为列表元素生成新列的代码问题排查
问题分析与解决
代码问题点
- 函数逻辑错误:你的
function里循环遍历names时,第一次判断就直接return了——不管当前行姓名是不是Tom,函数都会立刻返回结果,后面的Sarah、Bob根本没机会参与判断,导致函数本质上只在检查是否等于Tom。 - 未传递目标姓名参数:循环给每个姓名列赋值时,你调用的
function没有接收当前循环的n(也就是要判断的目标姓名),所以所有新列都用了同一个只判断Tom的逻辑,结果自然全和Tom列一样。
修正方案
方案一:修复原函数逻辑
给函数增加目标姓名参数,让它针对每个指定姓名做判断:
names=['Tom','Sarah','Bob'] def function(x, target_name): return 1 if x['Name'] == target_name else 0 for n in names: df[n] = df.apply(lambda x: function(x, n), axis=1)
方案二:更高效的向量化写法(推荐)
Pandas支持直接对整列做向量化比较,比逐行apply快得多,适合大数据集:
names=['Tom','Sarah','Bob'] for n in names: df[n] = (df['Name'] == n).astype(int)
这里df['Name'] == n会生成布尔值的Series,astype(int)把True转成1,False转成0,一步到位。
内容的提问来源于stack exchange,提问作者lala345
相关产品推荐
相关产品推荐

