Передел Dask Dataframe с пользовательским индексом - PullRequest
0 голосов
/ 22 января 2019

У меня есть огромный Dask Dataframe, похожий на этот

|Ind| C1 | C2 |....| Cn |
|-----------------------|
| 1 |val1| AE |....|time|
|-----------------------|
| 2 |val2| FB |....|time|
|-----------------------|
|...|....| .. |....| ...|
|-----------------------|
|n-1|valx| ZK |....|time|
| n |valn| QK |....|time|

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

Всначала я установил C2 в качестве индекса:

df = dd.readcsv(...)

df = df.set_index(df.C2)

Теперь я хочу перераспределить недавно проиндексированный фрейм данных и отобразить функцию для каждого раздела.Мой текущий подход выглядит следующим образом:

unique_c2 = df.index.unique().compute()

df = df.repartition(division=list(unique_c2))

# list(unique_c2) looks like this: ['AE', 'FB', ..., 'ZK', 'QK']

df.map_partitions(lambda x: my_func(x), meta=df)

Мое желаемое разбиение должно выглядеть следующим образом:

|Ind | C1 | C2 |....| Cn |
|------------------------|
| AE |val1| AE |....|time|
|------------------------|
| AE |val2| AE |....|time|
|------------------------|
|....|....| .. |....| ...|
|------------------------|
| AE |valn| AE |....|time|

...

|Ind | C1 | C2 |....| Cn |
|------------------------|
| ZK |val1| ZK |....|time|
|------------------------|
| ZK |val2| ZK |....|time|
|------------------------|
|....|....| .. |....| ...|
|------------------------|
| ZK |valn| ZK |....|time|

|Ind | C1 | C2 |....| Cn |
|------------------------|
| QK |val1| QK |....|time|
|------------------------|
| QK |val2| QK |....|time|
|------------------------|
|....|....| .. |....| ...|
|------------------------|
| QK |valn| QK |....|time|

Но функция перераспределения «объединяет» мои последние два индекса, поэтому мой последний раздел выглядиткак это:

|Ind | C1 | C2 |....| Cn |
|------------------------|
| ZK |val1| ZK |....|time|
|------------------------|
| ZK |val2| ZK |....|time|
|------------------------|
|....|....| .. |....| ...|
|------------------------|
| QK |valn| QK |....|time|
|------------------------|
|....|....| .. |....| ...|
|------------------------|
| QK |valn| QK |....|time|

Есть идеи, почему это происходит, или у вас есть лучшее решение для моей проблемы?Я знаю, что есть dask.groupby(...).apply(...).Но у моей функции отображения есть побочные эффекты, и apply(...) всегда выполняется дважды для каждого раздела dask.

...