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似乎效率很低,因为我需要循环执行许多列。