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

Pandas如何根据DataFrame列是否含Pasta新增列完成0/1打分

需求说明

现有存储餐食数据的DataFrame,其中Component列记录每份餐食的组成成分,示例数据如下:

----------------------------------
| ID |      Component              |
---------------------------------- 
| 1  |      Vegetables             |                                          
| 2  |      Pasta                  |                                               
| 3  |      Pasta, Vegetables      |                                         
| 4  |      Pulses, Vegetables     |                                         
| 5  |      Meat, Pasta, Vegetables|                                      
| 6  |      Meat, Vegetables       |                                        
| 7  |      Pulses                 |                                        
| 8  |      Meat                   |                                           
----------------------------------

需要新增打分列:餐食包含Pasta则赋值为1,不包含则赋值为0,即ID为2、3、5的记录得1分,其余记录得0分,要求代码仅匹配独立的'Pasta'术语,避免误匹配。

实现代码

直接使用pandas自带的字符串正则匹配方法即可,通过单词边界符保证仅匹配独立的Pasta术语,不会把包含Pasta字符的其他长单词(如PastaSauce)误判为命中,代码如下:

# 为DataFrame新增打分列
df['pasta_score'] = df['Component'].str.contains(r'\bPasta\b', regex=True).astype(int)

代码逻辑说明:

  • str.contains()用于对Series每一行做字符串匹配,传入正则r'\bPasta\b'中的\b是单词边界标识,只会匹配独立出现的Pasta术语
  • .astype(int)将匹配返回的布尔值True/False直接转换为整数1/0,正好对应打分规则

如果你的Component列成分统一用逗号分隔,也可以用拆分后精准判断的写法,效果完全一致:

df['pasta_score'] = df['Component'].apply(
    lambda x: 1 if 'Pasta' in [item.strip() for item in x.split(',')] else 0
)

运行后得到的结果完全符合预期:

IDComponentpasta_score
1Vegetables0
2Pasta1
3Pasta, Vegetables1
4Pulses, Vegetables0
5Meat, Pasta, Vegetables1
6Meat, Vegetables0
7Pulses0
8Meat0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:57:23