2015-07-19 62 views

回答

11

Pandas版本0.18.0实现了您正在寻找的内容:drop_first选项。这里有一个例子:

In [1]: import pandas as pd 

In [2]: pd.__version__ 
Out[2]: u'0.18.1' 

In [3]: s=pd.Series(list('abcbacb')) 

In [4]: pd.get_dummies(s,drop_first=True) 
Out[4]: 
    b c 
0 0.0 0.0 
1 1.0 0.0 
2 0.0 1.0 
3 1.0 0.0 
4 0.0 0.0 
5 0.0 1.0 
6 1.0 0.0 
2

有很多方法可以做到这一点。

在调用get_dummies之前,最简单的方法是用None代替其中一个值。假设你有:

import pandas as pd 
import numpy as np 
s = pd.Series(list('babca')) 
>> s 
0 b 
1 a 
2 b 
3 c 
4 a 

然后使用:

>> pd.get_dummies(np.where(s == s.unique()[0], None, s)) 
    a c 
0 0 0 
1 1 0 
2 0 0 
3 0 1 
4 1 0 

下降b

(当然,你需要考虑,如果你的类别栏尚未包含None)。


另一种方法是使用prefix参数get_dummies

pandas.get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, sparse=False)

前缀:字符串,字符串列表或字符串字典,默认值无 - Stri ng添加DataFrame列名在调用DataFrame上的get_dummies时,传递一个长度等于列数的列表。或者,前缀可以是将列名称映射到前缀的字典。

这将为所有结果列添加一些前缀,然后您可以使用此前缀删除其中一个列(使其唯一)。

+2

会尝试这些!但难道你不同意奇怪的是,这样一个共同的需求并没有作为get_dummies的一些参数来实现吗? – ihadanny

+0

@ihadanny不知道我亲自遇到需要这种表示的学习者。你有一些例子吗? –

+1

任何具有常数项的回归都会有问题(尽管大多数统计程序都足够聪明以自动删除共线变量)。例如,Stata会在回归中自动使用n-1个假人来避免这个问题。我不确定statsmodels是否会自动处理这个问题。 – JohnE