Выполните расчет для нескольких столбцов одновременно с пандами - PullRequest
0 голосов
/ 01 мая 2018

У меня большой массив данных с более чем 1 миллионом строк. Текущий df имеет только столбцы X, a, b, c. Я хочу выполнить вычисление, которое приведет к появлению новых столбцов: new_a, new_b, new_c (см. Рисунок)

Расчет: new_a = a / (X ^ 2)

У меня уже есть способ сделать это в Python:

col_list = ['a','b','c']

def new(col,X):
    score = col/(X**2)
    return score

new_col = ['new_a','new_b','new_c']

def calculate(df):
    for i in range(len(new_col)):
        df[new_col[i]] = df.apply(lambda row: new(row[col_list[i]],row['X']),axis=1)

calculate(df)

Интересно, есть ли другой способ достичь той же цели? Этот текущий способ это хорошо, но требует много времени для запуска и каким-то образом дает странные результаты для определенных операций. Спасибо.

enter image description here

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Вы хотите / X ^ 2 или / X? Вы просите один, но ваш пример показывает другой.

for col in col_list:
    new_col = 'new_' + col
    df[new_col] = df[col] / (df['X']**2)

даст вам то, о чем вы просите, если на самом деле то, что вы хотите, - это / X настроить соответственно.

0 голосов
/ 01 мая 2018
col_list = ['a','b','c']
df = pd.concat(
    [df, df[col_list].div(df['X'] ** 2, axis=0).add_prefix('new_')], axis=1
)

df
   X  a  b  c     new_a     new_b     new_c
0  5  3  4  5  0.120000  0.160000  0.200000
1  7  2  4  2  0.040816  0.081633  0.040816

Pandas выполняет выравнивание по индексу для каждого столбца, просто конкатенирует результат позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...