如何用Python/Pandas将DataFrame指定列值转为1/0填充新列并重组?
问题描述
现有如下DataFrame:
import pandas as pd Dat = pd.DataFrame({'a' : ['A', 'A', 'B', 'B'], 'b' : ['X', 'Y', 'X', 'Y'], 'val' : [1,12,-3,23]})
需要将其重组为如下结构:
pd.DataFrame({'A' : [1,1,0,0], 'B' : [0,0,1,1], 'X' : [1,0,1,0], 'Y' : [0,1,0,1], 'val' : [1,12,-3,23]})
即把原DataFrame中a、b列的取值作为新列,对应匹配的单元格填充1,不匹配的填充0。
解决方案
直接用pandas自带的pd.get_dummies()函数就能实现,这个函数专门用来将分类变量转换为独热编码形式的二进制列,完美匹配需求。
具体代码示例:
import pandas as pd # 初始化原DataFrame Dat = pd.DataFrame({'a' : ['A', 'A', 'B', 'B'], 'b' : ['X', 'Y', 'X', 'Y'], 'val' : [1,12,-3,23]}) # 对a、b列生成独热编码,同时保留val列 # 设置prefix为空,避免列名出现a_、b_这类前缀 result = pd.get_dummies(Dat, columns=['a', 'b'], prefix=['', '']) print(result)
执行后输出的结果就和目标结构完全一致:
val A B X Y 0 1 1 0 1 0 1 12 1 0 0 1 2 -3 0 1 1 0 3 23 0 1 0 1
如果对列的顺序有要求,可以用reindex调整:
result = result.reindex(columns=['A', 'B', 'X', 'Y', 'val'])
调整后就和示例中的列顺序完全匹配。
内容的提问来源于stack exchange,提问作者Brian Smith
相关产品推荐
相关产品推荐

