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

如何为df.str.get_dummies()实现类似pd.get_dummies()的drop_first功能?

实现str.get_dummies()类似pd.get_dummies()的drop_first功能

问题场景

现有如下Pandas Series:

0    mcdonalds, popeyes
1    wendys
2    popeyes
3    mcdonalds
4    mcdonalds
dtype: object

使用df.str.get_dummies(sep=', ')生成哑变量DataFrame后,得到:

popeyes  wendys  mcdonalds
0        1       0          1
1        0       1          0
2        1       0          0
3        0       0          1
4        0       0          1

需要避免虚拟变量陷阱,实现类似pd.get_dummies()中drop_first=True的效果,且不能硬编码指定要删除的列名。

解决方案

方法1:用iloc快速移除列

这是最直接的方式,通过位置索引自动移除第一列或最后一列,无需指定列名:

  • 移除第一列(对应drop_first=True的默认行为):
dummies = df.str.get_dummies(sep=', ')
result = dummies.iloc[:, 1:]

输出结果:

wendys  mcdonalds
0       0          1
1       1          0
2       0          0
3       0          1
4       0          1
  • 移除最后一列(匹配给出的预期输出):
dummies = df.str.get_dummies(sep=', ')
result = dummies.iloc[:, :-1]

输出结果:

popeyes  wendys
0        1       0
1        0       1
2        1       0
3        0       0
4        0       0

方法2:结合pd.get_dummies原生参数

如果想完全贴合pd.get_dummies的drop_first逻辑,可以先把多值Series拆成长格式,再生成哑变量:

import pandas as pd

# 拆分每个元素为单独行
long_format = df.str.split(', ', expand=True).stack().reset_index(level=1, drop=True).to_frame('brand')
# 生成哑变量并自动移除第一列,最后按原索引聚合
result = pd.get_dummies(long_format, drop_first=True).groupby(level=0).max()

这个方法生成的结果和iloc[:, :-1]一致,完全不用硬编码列名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 21:15:10