将数据框子节中的1值替换为另一列的值

时间:2019-04-12 13:26:07

标签: python pandas one-hot-encoding

我有一个热编码的数据帧,例如:

|  qtd|   a |   b |  c |   d |  e | ...z|
|-----+-----+-----|----|----+-----+-----|
|  90 |   1 |   0 |  0 |   0 |  0 |   0 |
|  10 |   0 |   0 |  0 |   0 |  0 |   1 |
|  40 |   0 |   1 |  0 |   0 |  0 |   0 |
|  80 |   0 |   0 |  1 |   0 |  0 |   0 |
|  90 |   0 |   1 |  0 |   0 |  0 |   0 |

我想用a中的值将列qtd的值替换为无穷大,其中列的值为1,a中只有一个1值无限数据帧子帧。

例如:

|  qtd|   a |   b |  c |   d |  e | ...z|
|-----+-----+-----|----|----+-----+-----|
|  90 |  90 |   0 |  0 |   0 |  0 |   0 |
|  10 |   0 |   0 |  0 |   0 |  0 |  10 |
|  40 |   0 |  40 |  0 |   0 |  0 |   0 |
|  80 |   0 |   0 | 80 |   0 |  0 |   0 |
|  90 |   0 |  90 |  0 |   0 |  0 |   0 |

2 个答案:

答案 0 :(得分:3)

您可以选择所有列,而不用DataFrame.iloc首先选择,而用DataFrame.mul逐列选择:

df.iloc[:, 1:] = df.iloc[:, 1:].mul(df['qtd'], axis=0)
print (df)
   qtd   a   b   c  d  e   z
0   90  90   0   0  0  0   0
1   10   0   0   0  0  0  10
2   40   0  40   0  0  0   0
3   80   0   0  80  0  0   0
4   90   0  90   0  0  0   0

如果列并非总是第一列,则可以按Index.difference获取列名称,并按子集进行选择:

cols = df.columns.difference(['qtd'])
df[cols] = df[cols].mul(df['qtd'], axis=0)

如果第一列是索引:

df = df.mul(df.index, axis=0)
print (df)
      a   b   c  d  e   z
qtd                      
90   90   0   0  0  0   0
10    0   0   0  0  0  10
40    0  40   0  0  0   0
80    0   0  80  0  0   0
90    0  90   0  0  0   0

答案 1 :(得分:1)

这是const add = (x, y) => x + y; [ 3, 1, 2 ].reduce( add ); 广播方式

numpy