我正在尝试使用exisitng数据帧中的二进制(0或1)值创建新数据帧。对于给定数据帧中的每一行,程序应从每个单元格中获取值,并为新数据框中具有相同编号的行的相应列设置1
我已尝试执行以下代码段。
for col in products :
index = 0;
for item in products.loc[col] :
products_coded.ix[index, 'prod_' + str(item)] = 1;
index = index + 1;
适用于较少的行数。但是,任何大型数据集都需要大量时间。什么是获得理想结果的最佳方式。
答案 0 :(得分:1)
我认为你需要:
get_dummies
,其投射值为string
s max
max
int
reindex
有关排序和追加缺失的列,请将NaN
替换为参数0
的{{1}}并删除第一个fill_value=0
列add_prefix
用于重命名列0
另一个类似的解决方案:
df = pd.DataFrame({'B':[3,1,12,12,8],
'C':[0,6,0,14,0],
'D':[0,14,0,0,0]})
print (df)
B C D
0 3 0 0
1 1 6 14
2 12 0 0
3 12 14 0
4 8 0 0
df1 = (pd.get_dummies(df.astype(str), prefix='', prefix_sep='')
.max(level=0, axis=1)
.rename(columns=lambda x: int(x))
.reindex(columns=range(1, df.values.max() + 1), fill_value=0)
.add_prefix('prod_'))
print (df1)
prod_1 prod_2 prod_3 prod_4 prod_5 prod_6 prod_7 prod_8 prod_9 \
0 0 0 1 0 0 0 0 0 0
1 1 0 0 0 0 1 0 0 0
2 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 1 0
prod_10 prod_11 prod_12 prod_13 prod_14
0 0 0 0 0 0
1 0 0 0 0 1
2 0 0 1 0 0
3 0 0 1 0 1
4 0 0 0 0 0