Есть ли способ выполнения арифметических операций для всего фрейма в Python? - PullRequest
2 голосов
/ 09 июня 2019

Этот вопрос о недавнем пакете данных h2o.Я хочу заменить код pandas этой библиотекой для повышения производительности.

Вопрос прост: мне нужно разделить / суммировать / умножить / вычесть целый кадр или различные выбранные столбцы на число.

В пандах, чтобы разделить все столбцы, кроме первого, на 3, можно написать:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    "C0": np.random.randn(10000), 
    "C1": np.random.randn(10000)
})
df.iloc[:,1:] = df.iloc[:,1:]/3

В пакете с данными можно сделать это только для одного выбранного столбца:

import datatable as dt
from datatable import f

df = dt.Frame(np.random.randn(1000000))
df[:, "C1"] = dt.Frame(np.random.randn(1000000))
for i in range(1,df.shape[1]): df[:,i] = df[:,f[i]/3]

На данный момент, в Python 3.6 (я не знаю о версии 3.7), FrameProxy f не допускает срезы.Я просто спрашиваю, есть ли лучший способ выполнения такого рода арифметических операций, чем цикл, я не нашел его в Документация .

1 Ответ

1 голос
/ 25 июня 2019

Вы правы, что f -символ не поддерживает выражения срезов в настоящее время (кстати, это интересная идея, возможно, это можно было бы добавить в будущем?)

Однако правая частьприсваиванием может быть список выражений, позволяющий записать следующее:

df = dt.Frame(C0=np.random.randn(1000000),
              C1=np.random.randn(1000000))

df[:, 1:] = [f[i]/3 for i in range(1, df.ncols)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...