如何基于多字符串匹配生成新列,匹配对应事件时标记为1?
基于多字符串匹配创建标记列的解决方案
需求说明
根据Event列中的事件类型(Breakfast、Lunch)创建对应新列,当行内Event值与列名匹配时标记为1,否则为null。
原始数据
import pandas as pd # 原始数据集 data = { 'Date': ['2022-11-01', '2022-11-01', '2022-11-01', '2022-11-02', '2022-11-02'], 'Event': ['Breakfast', 'Breakfast', 'Lunch', 'Breakfast', 'Lunch'] } df = pd.DataFrame(data)
输出的原始DataFrame:
Date Event 0 2022-11-01 Breakfast 1 2022-11-01 Breakfast 2 2022-11-01 Lunch 3 2022-11-02 Breakfast 4 2022-11-02 Lunch
期望结果
Date Event Breakfast Lunch 0 2022-11-01 Breakfast 1 <NA> 1 2022-11-01 Breakfast 1 <NA> 2 2022-11-01 Lunch <NA> 1 3 2022-11-02 Breakfast 1 <NA> 4 2022-11-02 Lunch <NA> 1
解决方案
方法1:使用pd.get_dummies(适合多类别场景)
利用pandas的哑变量生成函数快速创建标记列,再将0替换为null:
# 生成事件类型的哑变量列 dummy_cols = pd.get_dummies(df['Event'], dtype=float) # 将0替换为null dummy_cols = dummy_cols.replace(0, pd.NA) # 合并到原数据集 result_df = pd.concat([df, dummy_cols], axis=1) print(result_df)
方法2:手动创建列(适合少类别场景)
通过条件判断逐个生成目标列:
# 创建Breakfast列 df['Breakfast'] = df['Event'].map(lambda x: 1 if x == 'Breakfast' else pd.NA) # 创建Lunch列 df['Lunch'] = df['Event'].map(lambda x: 1 if x == 'Lunch' else pd.NA) print(df)
两种方法都能得到符合需求的结果,若Event列的类别较多,优先选择方法1,代码更简洁高效。
内容的提问来源于stack exchange,提问作者sus_zeus
相关产品推荐
相关产品推荐

