Hi有一个包含分类变量的pandas数据帧df
。
df=pandas.DataFrame(data=[['male','blue'],['female','brown'],
['male','black']],columns=['gender','eyes'])
df
Out[16]:
gender eyes
0 male blue
1 female brown
2 male black
使用函数get_dummies我得到以下数据帧
df_dummies = pandas.get_dummies(df)
df_dummies
Out[18]:
gender_female gender_male eyes_black eyes_blue eyes_brown
0 0 1 0 1 0
1 1 0 0 0 1
2 0 1 1 0 0
但是列gender_female
和gender_male
包含相同的信息,因为原始列可以采用二进制值。有没有一种(聪明的)方法只保留两列中的一列?
已更新
使用
df_dummies = pandas.get_dummies(df,drop_first=True)
会给我
df_dummies
Out[21]:
gender_male eyes_blue eyes_brown
0 1 1 0
1 0 0 1
2 1 0 0
但我想删除原来只有两种可能的列
期望的结果应该是
df_dummies
Out[18]:
gender_male eyes_black eyes_blue eyes_brown
0 1 0 1 0
1 0 0 0 1
2 1 1 0 0
是的,您可以使用参数
dropfirst
:从documentation:
要为
eyes
和gender
使用所有伪列,请使用以下命令:输出:
更一般:
输出:
您可以使用
itertools.combinations
来查找所有列对,那么任何潜在的冗余列对都将是一对,其中每一行的一列为True,另一列为False,即异或:然而,这也注意到在你的例子中,所有的女性都有棕色的眼睛,因此我们得到了以下的印刷品:
相关问题 更多 >
编程相关推荐