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

如何基于多字符串匹配生成新列,匹配对应事件时标记为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 18:17:17