我正在尝试从一个exisitng数据帧创建一个具有二进制(0或1)值的新数据帧。对于给定数据帧中的每一行,程序应从每个单元格中获取值,并为新数据帧中用相同编号索引的行的相应列设置1

python - 使用现有数据框中的值创建包含带有 Pandas 的二进制值列的数据框-LMLPHP

python - 使用现有数据框中的值创建包含带有 Pandas 的二进制值列的数据框-LMLPHP

我尝试执行以下代码段。

for col in products :
    index = 0;
    for item in products.loc[col] :
        products_coded.ix[index, 'prod_' + str(item)] = 1;
        index = index + 1;


它适用于较少的行数。但是,任何大型数据集都需要花费大量时间。什么是获得预期结果的最佳方法。

最佳答案

我认为您需要:


第一个get_dummies,将值强制转换为string s
通过列名称max聚集max
为了正确排序将列转换为int
reindex用于排序和追加缺少的列,用参数NaN替换0fill_value=0并删除第一列0
add_prefix用于重命名列




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


另一个类似的解决方案:

df1 = (pd.get_dummies(df.astype(str), prefix='', prefix_sep='')
         .max(level=0, axis=1))

df1.columns = df1.columns.astype(int)

df1 = (df1.reindex(columns=range(1, df1.columns.max() + 1), fill_value=0)
          .add_prefix('prod_'))

关于python - 使用现有数据框中的值创建包含带有 Pandas 的二进制值列的数据框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48565092/

10-15 12:49
查看更多