У меня очень большой фрейм данных, и я хотел бы умножить каждый элемент в каждом столбце на значение в списке.

       Name  c1  c2  c3  c4
    0   a1   1   2   2   3
    1   a2   2   1   1   2
    2   a3   3   1   2   1
    3   a4   2   3   3   4

l = [2, 3, 1, 4]

То, что я хотел бы сделать, это умножить весь столбец c1 на 2, c2 на 3, c3 на 1, c4 на 3 и так далее.

Я знаю, что я могу сделать это для одного столбца с {{Х0}} но я не уверен, как сделать это эффективно по всем столбцам.

2
double_h 7 Июл 2019 в 13:10

3 ответа

Лучший ответ

Вы можете использовать .loc и имена столбцов следующим образом:

import pandas as pd
import numpy as np

np.random.seed(12)

df = pd.DataFrame(
    {
        "df0" : np.random.choice(["a", "b"], 100),
        "df1" : np.random.randint(0, 15, 100), 
        "df2" : np.random.randint(0, 15, 100),
        "df3" : np.random.randint(0, 15, 100),
        "df4" : np.random.randint(0, 15, 100),
    }
)
print(df.head())

l = [2, 3, 1, 4]
df.loc[:, ["df1", "df2", "df3", "df4"]] *= np.array(l)

df.head()

Вот вывод:

  df0  df1  df2  df3  df4
0   b    5   10    7   13
1   b    3    2   13    3
2   a    5    0   11   14
3   b   11    1    7   10
4   b    0    4    1   12

  df0  df1  df2  df3  df4
0   b   10   30    7   52
1   b    6    6   13   12
2   a   10    0   11   56
3   b   22    3    7   40
4   b    0   12    1   48
3
OlivierG. 7 Июл 2019 в 10:18

Используйте DataFrame.iloc и несколько столбцов без первого:

l = [2, 3, 1, 4]
df.iloc[:, 1:] *= l
print (df)
  Name  c1  c2  c3  c4
0   a1   2   6   2  12
1   a2   4   3   1   8
2   a3   6   3   2   4
3   a4   4   9   3  16
0
jezrael 7 Июл 2019 в 13:00

Я думаю, что вы делаете правильно, вам нужно определить все столбцы, которые нужно умножить

df.iloc[:,1:] = df.iloc[:,1:]*l
0
tawab_shakeel 7 Июл 2019 в 10:27