You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python函数结合条件逻辑为Pandas生成两列数据?

问题解答

当然可以通过单个函数配合一次apply操作,同时为DataFrame生成多个新列,你的核心思路完全可行,只需修正现有代码中的几个细节问题即可实现预期效果。

现有代码的问题点

  • 列名不匹配:DataFrame定义的列是subclass,但函数中误写为sub_class,会触发KeyError
  • 大小写不匹配:数据中class的取值是小写lime,但函数判断条件写的是大写'Lime',导致该分支永远不会触发
  • 部分条件在当前数据集下不会触发(比如subclass == 'orange'、class == 'Apple'),但不影响整体逻辑

修正后的完整代码

import pandas as pd

list_of_classes =[
['cit','lemon'],
['cit','lemon'],
['cit','lemon'],
['cit','lemon'], 
['watermelon','lemon'],
['watermelon','lemon'],
['lime','water'],    
['lime','water']
]

df = pd.DataFrame(list_of_classes,columns = ['class','subclass'])

def create_variables(row):
    # 修正大小写匹配问题,列名修正为subclass
    if row['class'] == 'lime':
        val = 'Lime'
        val2 = 1
    elif row['subclass'] == 'lemon':
        val = 'lemon'
        val2 = 1.1
    elif row['subclass'] == 'orange':
        val = 'orange'
        val2 = 1.2
    elif row['class'] == 'Apple':
        val = 'Apple'
        val2 = 2
    else:
        val = 'exception'
        val2 = 'exception'
    return val, val2

# 一次apply生成两列
df[['fruit', 'number']] = df.apply(create_variables, axis=1)

print(df)

运行结果

class subclass    fruit     number
0         cit    lemon    lemon       1.1
1         cit    lemon    lemon       1.1
2         cit    lemon    lemon       1.1
3         cit    lemon    lemon       1.1
4  watermelon    lemon    lemon       1.1
5  watermelon    lemon    lemon       1.1
6         lime    water  exception  exception
7         lime    water  exception  exception

补充说明

  • 函数返回的二元组会被apply自动处理为包含两个元素的序列,直接赋值给df[['fruit', 'number']]即可完成多列的一次性生成
  • 如果需要生成更多列,只需在函数中返回对应长度的元组,同时扩展赋值的列名列表即可

内容的提问来源于stack exchange,提问作者Patty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 23:31:04