如何为分类变量的子集创建虚拟变量?

时间:2017-10-18 09:31:03

标签: python pandas

实施例

>>> import pandas as pd
>>> s = pd.Series(list('abca'))
>>> s
0    a
1    b
2    c
3    a
dtype: object
>>> pd.get_dummies(s)
   a  b  c
0  1  0  0
1  0  1  0
2  0  0  1
3  1  0  0

现在我想将ab映射到虚拟变量,但没有别的。我怎么能这样做?

我尝试了什么

>>> pd.get_dummies(s, columns=['a', 'b'])
   a  b  c
0  1  0  0
1  0  1  0
2  0  0  1
3  1  0  0

3 个答案:

答案 0 :(得分:2)

一种更简单的方法是用感兴趣的cols掩盖结果df:

In[16]:
pd.get_dummies(s)[list('ab')]

Out[16]: 
   a  b
0  1  0
1  0  1
2  0  0
3  1  0

因此,这将使用感兴趣的cols选择合成的假人df

如果你不想首先计算你不感兴趣的列的虚拟列,那么你可以过滤掉感兴趣的行,但这需要reindex一个{{3} (感谢@jezrael的建议):

In[20]:
pd.get_dummies(s[s.isin(list('ab'))]).reindex(s.index, fill_value=0)

Out[20]: 
   a  b
0  1  0
1  0  1
2  0  0
3  1  0

答案 1 :(得分:0)

将其他所有内容设置为nan是一个选项:

s[~((s == 'a') | (s == 'b'))] = float('nan')

产生:

>>> pd.get_dummies(s)
   a  b
0  1  0
1  0  1
2  0  0
3  1  0

答案 2 :(得分:0)

另一种方式

In [3907]: pd.DataFrame({c:s.eq(c).astype(int) for c in ['a', 'b']})
Out[3907]:
   a  b
0  1  0
1  0  1
2  0  0
3  1  0

或者,(s==c).astype(int)

相关问题