用另一列的值替换数据框子部分中的 1 个值
Replace 1 value in a subsection of dataframe with value of another column
我有一个单热编码数据帧,例如:
| 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,[=12= 中只有一个 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 |
您可以 select 所有列而不是第一个 DataFrame.iloc
and multiple by column with 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
和 select 通过子集获取列名称:
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
我有一个单热编码数据帧,例如:
| 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,[=12= 中只有一个 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 |
您可以 select 所有列而不是第一个 DataFrame.iloc
and multiple by column with 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
和 select 通过子集获取列名称:
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