Как использовать dask dataframe groupby применять для замены столбцов в оригинальном dataframe? - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть много фреймов данных dask, каждый из которых содержит точки с координатами (скажем, «X», «Y» и «Z») и значениями цвета (скажем, «R», «G» и «B»). ). Эти разные временные рамки данных могут включать в себя точки, которые также включены в другие временные рамки. Основываясь на значениях X, Y, Z, я хочу определить цвет, поэтому у меня есть функция, которая получает набор цветов в качестве входных данных и возвращает один цвет. Я также добавил все существующие фреймы данных в один (ddf) и надеялся с легкостью использовать возможности dask.

Так что в основном это мой код:

def determine_color(data):
    '''
    Takes a dataframe with X,Y,Z,R,G,B and arbitrary number of rows and 
      returns coordinates and color. X,Y,Z of input are all the same
    INPUT: data - dask dataframe
    OUTPUT: pandas dataframe
    '''
    colors = np.array(data[['R','G','B']]) # <- ERROR occurs
    ...
    point = pd.DataFrame({'X' : data.loc[0, 'X'], 'Y': data.loc[0, 'Y'], 'Z' : data.loc[0, 'Z'],
            'R': finalcolor[0], 'G': finalcolor[1], 'B': finalcolor[2]})
    return point

...
# Take all points with same X,Y,Z coordinates and determine their color
meta = {'X' : float, 'Y': float, 'Z' : float, 'R':int, 'G':int, 'B':int}
ddf = ddf.set_index('X').groupby(['X','Y','Z']).apply(determine_color, meta=meta).reset_index()
# Convert dask dataframe to pandas dataframe
ddf = ddf.compute()

Если я запусту этот Я получаю сообщение об ошибке в отмеченной точке. Почему-то я не понимаю, какой именно параметр присваивается determine_color, я догадался, что это фрейм данных dask, но я не могу получить из него массив numpy. Это должно быть как-то возможно в отношении размера, потому что я точно знаю, что в группе не более 350 членов, которые обязательно должны помещаться в память ...

В сообщении об ошибке говорится, что "None of [Index(['R', 'G', 'B'], dtype='object', name='X')] are in the [index]". Означает ли это, что я должен сначала позвонить как-то вроде .set_index('R')? Я попробовал это, но получил ошибку "None of [Index(['R', 'G', 'B'], dtype='object', name='R')] are in the [index]" сейчас.

Мой последний вопрос: правильно ли я понял метаданные? Верно ли, что в конце ddf содержит каждую комбинацию координат только один раз и соответствующие значения RGB, если я реализую ее, как показано выше?

...