pandas df.str.get_dummies()vs pd.get_dummies()(Python)

5n0oy7gb  于 2023-06-20  发布在  Python
关注(0)|答案(2)|浏览(147)

我有这样一个系列:

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

我使用以下代码:

df.str.get_dummies(sep = ', ')

获取以下 Dataframe :

popeyes wendys mcdonalds
1       0      1
0       1      0
1       0      0
0       0      1
0       0      1

我想删除一个列,但考虑到虚拟变量trap。如何在pd.get_dummies()的drop_first参数中做到这一点?
预期的输出可能看起来像这样,但我不想硬编码以删除随机列:

popeyes wendys 
1       0      
0       1      
1       0      
0       0      
0       0
nsc4cvqm

nsc4cvqm1#

您可以在使用pd.get_dummies之前分解Series

>>> (pd.get_dummies(df.str.split(', ').explode(), drop_first=True)
       .groupby(level=0).max())

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

详细内容:

>>> df.str.split(', ').explode()
0    mcdonalds
0      popeyes
1       wendys
2      popeyes
3    mcdonalds
4    mcdonalds
dtype: object

>>> pd.get_dummies(df.str.split(', ').explode(), drop_first=True)
   popeyes  wendys
0        0       0
0        1       0
1        0       1
2        1       0
3        0       0
4        0       0

备选项

>>> df.str.get_dummies(sep=', ').drop(columns=df.iloc[0].split(', ')[0])

   popeyes  wendys
0        1       0
1        0       1
2        1       0
3        0       0
4        0       0
7eumitmz

7eumitmz2#

您可以切片以移除第一列:

s.str.get_dummies(', ').iloc[:, 1:]

输出:

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

相关问题