pandas.DataFrame.mul
с axis=0
Когда Pandas работает между DataFrame
и Series
, он выравнивает индекс Series
со столбцами DataFrame
.Мы можем изменить это поведение, используя эквивалентный метод операции и передав аргумент axis=0
, чтобы сообщить Pandas о выравнивании индекса Series
с индексом DataFrame
.
df[['col2', 'col3']] = df[['col2', 'col3']].mul(df['col1'], axis=0)
df
col1 col2 col3
0 10 40 50
1 100 200 300
2 1000 6000 7000
Более короткий способ сделать это
df.update(df.drop('col1', 1).mul(df.col1, axis=0))
в линии
А не на месте .То есть, изготовить копию и оставить оригинал в покое
df.assign(**df.drop('col1', 1).mul(df.col1, axis=0))
col1 col2 col3
0 10 40 50
1 100 200 300
2 1000 6000 7000
После мысли
Я возился с этим совершенно хакерским способом сделать это.
[df.get(c).__imul__(df.col1) for c in [*df][1:]];
Супер брутто, поскольку это зависит от побочного эффекта понимания и отбрасывает результат понимания.
Пожалуйста, игнорируйте это!