Простой способ реверсировать распределенный фрейм данных - PullRequest
2 голосов
/ 02 апреля 2019

Я попытался изменить порядок кадров данных dask, используя [::-1], но получил NotImplementedError, который можно использовать только для индексации iloc, например [:, ['foo']]

, например,

tmp=pd.DataFrame(dict(a=[0,1,1,1,0,1,0,1], b=[0,0,0,0,1,0,0,1]))
tmp=dd.from_pandas(tmp, npartitions=4)
tmp[::-1]

Как можно легко изменить порядок отсортированного кадра данных, не загружая весь кадр данных в память?

Ответы [ 2 ]

2 голосов
/ 02 апреля 2019

Я наконец нашел достойный способ сделать это, используя целочисленный индекс и умножив на -1.

tmp=pd.DataFrame(dict(a=[0,1,1,1,0,1,0,1], b=[0,0,0,0,1,0,0,1]))
tmp=dd.from_pandas(tmp, npartitions=4)
tmp=tmp.reset_index()
tmp['index']=tmp['index']*-1
tmp=tmp.set_index('index')
tmp.compute()
1 голос
/ 02 апреля 2019

Вот решение, которое оставляет индекс без изменений:

@dask.delayed
def reverse_pdf(pdf):
    '''delayed function to reverse a pandas dataframe'''
    return pdf[::-1]

# generating testdata
tmp=pd.DataFrame(dict(a=[0,1,1,1,0,1,0,1], b=[0,0,0,0,1,0,0,1]))
tmp_dd=dd.from_pandas(tmp, npartitions=4)

# reversing tmp_dd
ds = tmp_dd.to_delayed() # one delayed object per partition
ds = [reverse_pdf(d) for d in ds] # reverse each partition
ds = reversed(ds) # reverse the order of the partitions
tmp_dd_reversed = dd.from_delayed(ds) # construct a new dask dataframe
...