Python 用另一列的值替换dataframe子部分中的1值

Python 用另一列的值替换dataframe子部分中的1值,python,pandas,one-hot-encoding,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 |

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

|  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 |
我想用
qtd
中的值替换
a
到无穷大列的值,如果列的值为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 |

您可以选择所有不带“第一个”和“多个”列的列,包括:

如果列不总是第一个,则可以按获取列名称并按子集选择:

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

您可以选择所有不带“第一个”和“多个”列的列,包括:

如果列不总是第一个,则可以按获取列名称并按子集选择:

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

这里是
numpy
广播方式

df.values[:,1:]*=df.qtd[:,None]
df
Out[461]: 
   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

这里是
numpy
广播方式

df.values[:,1:]*=df.qtd[:,None]
df
Out[461]: 
   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

所以您需要
np.where()
。想必你做了研究,但有些东西没有;不工作;问题是什么?使用np.where()的问题是我需要多个列,因此使用where似乎效率很低,因为我需要循环遍历很多列。因此您需要
np.where()
。想必你做了研究,但有些东西没有;不工作;问题是什么?使用np.where()的问题是,我需要执行多个列,因此使用where似乎效率很低,因为我需要循环执行许多列。