>>> 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
现在我想将a
和b
映射到虚拟变量,但没有别的。我怎么能这样做?
>>> 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
答案 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)